1*61c4878aSAndroid Build Coastguard Worker // Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker #include "pw_analog/microvolt_input.h"
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Worker #include "pw_unit_test/framework.h"
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker namespace pw {
19*61c4878aSAndroid Build Coastguard Worker namespace analog {
20*61c4878aSAndroid Build Coastguard Worker namespace {
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Worker using namespace std::chrono_literals;
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kLimitsMax = 4096;
25*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kLimitsMin = 0;
26*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kReferenceMaxVoltageUv = 1800000;
27*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kReferenceMinVoltageUv = 0;
28*61c4878aSAndroid Build Coastguard Worker constexpr chrono::SystemClock::duration kTimeout =
29*61c4878aSAndroid Build Coastguard Worker chrono::SystemClock::for_at_least(1ms);
30*61c4878aSAndroid Build Coastguard Worker
31*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kBipolarLimitsMax = 4096;
32*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kBipolarLimitsMin = -4096;
33*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kBipolarReferenceMaxVoltageUv = 1800000;
34*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kBipolarReferenceMinVoltageUv = -1800000;
35*61c4878aSAndroid Build Coastguard Worker
36*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kCornerLimitsMax = std::numeric_limits<int32_t>::max();
37*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kCornerLimitsMin = std::numeric_limits<int32_t>::min();
38*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kCornerReferenceMaxVoltageUv =
39*61c4878aSAndroid Build Coastguard Worker std::numeric_limits<int32_t>::max();
40*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kCornerReferenceMinVoltageUv =
41*61c4878aSAndroid Build Coastguard Worker std::numeric_limits<int32_t>::min();
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kInvertedLimitsMax = std::numeric_limits<int32_t>::min();
44*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kInvertedLimitsMin = std::numeric_limits<int32_t>::max();
45*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kInvertedReferenceMaxVoltageUv =
46*61c4878aSAndroid Build Coastguard Worker std::numeric_limits<int32_t>::min();
47*61c4878aSAndroid Build Coastguard Worker constexpr int32_t kInvertedReferenceMinVoltageUv =
48*61c4878aSAndroid Build Coastguard Worker std::numeric_limits<int32_t>::max();
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard Worker // Fake voltage input that's used for testing.
51*61c4878aSAndroid Build Coastguard Worker class TestMicrovoltInput : public MicrovoltInput {
52*61c4878aSAndroid Build Coastguard Worker public:
TestMicrovoltInput(AnalogInput::Limits limits,MicrovoltInput::References reference)53*61c4878aSAndroid Build Coastguard Worker constexpr explicit TestMicrovoltInput(AnalogInput::Limits limits,
54*61c4878aSAndroid Build Coastguard Worker MicrovoltInput::References reference)
55*61c4878aSAndroid Build Coastguard Worker : sample_(0), limits_(limits), reference_(reference) {}
56*61c4878aSAndroid Build Coastguard Worker
SetSampleValue(int32_t sample)57*61c4878aSAndroid Build Coastguard Worker void SetSampleValue(int32_t sample) { sample_ = sample; }
58*61c4878aSAndroid Build Coastguard Worker
59*61c4878aSAndroid Build Coastguard Worker private:
TryReadUntil(chrono::SystemClock::time_point)60*61c4878aSAndroid Build Coastguard Worker Result<int32_t> TryReadUntil(chrono::SystemClock::time_point) override {
61*61c4878aSAndroid Build Coastguard Worker return sample_;
62*61c4878aSAndroid Build Coastguard Worker }
63*61c4878aSAndroid Build Coastguard Worker
GetLimits() const64*61c4878aSAndroid Build Coastguard Worker Limits GetLimits() const override { return limits_; }
GetReferences() const65*61c4878aSAndroid Build Coastguard Worker References GetReferences() const override { return reference_; }
66*61c4878aSAndroid Build Coastguard Worker
67*61c4878aSAndroid Build Coastguard Worker uint32_t sample_;
68*61c4878aSAndroid Build Coastguard Worker const Limits limits_;
69*61c4878aSAndroid Build Coastguard Worker const References reference_;
70*61c4878aSAndroid Build Coastguard Worker };
71*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,Construction)72*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, Construction) {
73*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
74*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
75*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kReferenceMaxVoltageUv,
76*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kReferenceMinVoltageUv});
77*61c4878aSAndroid Build Coastguard Worker }
78*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithSampleAtMin)79*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithSampleAtMin) {
80*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
81*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
82*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kReferenceMaxVoltageUv,
83*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kReferenceMinVoltageUv});
84*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMin);
85*61c4878aSAndroid Build Coastguard Worker
86*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
87*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
88*61c4878aSAndroid Build Coastguard Worker
89*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), 0);
90*61c4878aSAndroid Build Coastguard Worker }
91*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithSampleAtMax)92*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithSampleAtMax) {
93*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
94*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
95*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kReferenceMaxVoltageUv,
96*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kReferenceMinVoltageUv});
97*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMax);
98*61c4878aSAndroid Build Coastguard Worker
99*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
100*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
101*61c4878aSAndroid Build Coastguard Worker
102*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kReferenceMaxVoltageUv);
103*61c4878aSAndroid Build Coastguard Worker }
104*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithSampleAtHalf)105*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithSampleAtHalf) {
106*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
107*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
108*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kReferenceMaxVoltageUv,
109*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kReferenceMinVoltageUv});
110*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMax / 2);
111*61c4878aSAndroid Build Coastguard Worker
112*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
113*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kReferenceMaxVoltageUv / 2);
116*61c4878aSAndroid Build Coastguard Worker }
117*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarAdcAtZero)118*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarAdcAtZero) {
119*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
120*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kBipolarLimitsMin, .max = kBipolarLimitsMax},
121*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
122*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
123*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(0);
124*61c4878aSAndroid Build Coastguard Worker
125*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
126*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
127*61c4878aSAndroid Build Coastguard Worker
128*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), 0);
129*61c4878aSAndroid Build Coastguard Worker }
130*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarAdcAtMin)131*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarAdcAtMin) {
132*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
133*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kBipolarLimitsMin, .max = kBipolarLimitsMax},
134*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
135*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
136*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kBipolarLimitsMin);
137*61c4878aSAndroid Build Coastguard Worker
138*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
139*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
140*61c4878aSAndroid Build Coastguard Worker
141*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMinVoltageUv);
142*61c4878aSAndroid Build Coastguard Worker }
143*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarAdcAtMax)144*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarAdcAtMax) {
145*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
146*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kBipolarLimitsMin, .max = kBipolarLimitsMax},
147*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
148*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
149*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kBipolarLimitsMax);
150*61c4878aSAndroid Build Coastguard Worker
151*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
152*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
153*61c4878aSAndroid Build Coastguard Worker
154*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMaxVoltageUv);
155*61c4878aSAndroid Build Coastguard Worker }
156*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarAdcAtUpperHalf)157*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarAdcAtUpperHalf) {
158*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
159*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kBipolarLimitsMin, .max = kBipolarLimitsMax},
160*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
161*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
162*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kBipolarLimitsMax / 2);
163*61c4878aSAndroid Build Coastguard Worker
164*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
165*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
166*61c4878aSAndroid Build Coastguard Worker
167*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMaxVoltageUv / 2);
168*61c4878aSAndroid Build Coastguard Worker }
169*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarAdcAtLowerHalf)170*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarAdcAtLowerHalf) {
171*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
172*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kBipolarLimitsMin, .max = kBipolarLimitsMax},
173*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
174*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
175*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kBipolarLimitsMin / 2);
176*61c4878aSAndroid Build Coastguard Worker
177*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
178*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
179*61c4878aSAndroid Build Coastguard Worker
180*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMinVoltageUv / 2);
181*61c4878aSAndroid Build Coastguard Worker }
182*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarReferenceAtZero)183*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarReferenceAtZero) {
184*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
185*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
186*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
187*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
188*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(0);
189*61c4878aSAndroid Build Coastguard Worker
190*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
191*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
192*61c4878aSAndroid Build Coastguard Worker
193*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMinVoltageUv);
194*61c4878aSAndroid Build Coastguard Worker }
195*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarReferenceAtMin)196*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarReferenceAtMin) {
197*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
198*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
199*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
200*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
201*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMin);
202*61c4878aSAndroid Build Coastguard Worker
203*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
204*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
205*61c4878aSAndroid Build Coastguard Worker
206*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMinVoltageUv);
207*61c4878aSAndroid Build Coastguard Worker }
208*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarReferenceAtMax)209*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarReferenceAtMax) {
210*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
211*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
212*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
213*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
214*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMax);
215*61c4878aSAndroid Build Coastguard Worker
216*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
217*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
218*61c4878aSAndroid Build Coastguard Worker
219*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), kBipolarReferenceMaxVoltageUv);
220*61c4878aSAndroid Build Coastguard Worker }
221*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithBipolarReferenceAtHalf)222*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithBipolarReferenceAtHalf) {
223*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
224*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kLimitsMin, .max = kLimitsMax},
225*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kBipolarReferenceMaxVoltageUv,
226*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kBipolarReferenceMinVoltageUv});
227*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kLimitsMax / 2);
228*61c4878aSAndroid Build Coastguard Worker
229*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
230*61c4878aSAndroid Build Coastguard Worker ASSERT_TRUE(result.status().ok());
231*61c4878aSAndroid Build Coastguard Worker
232*61c4878aSAndroid Build Coastguard Worker EXPECT_EQ(result.value(), 0);
233*61c4878aSAndroid Build Coastguard Worker }
234*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithSampleAtMinCornerCase)235*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithSampleAtMinCornerCase) {
236*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
237*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kCornerLimitsMin, .max = kCornerLimitsMax},
238*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kCornerReferenceMaxVoltageUv,
239*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kCornerReferenceMinVoltageUv});
240*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kCornerLimitsMin);
241*61c4878aSAndroid Build Coastguard Worker
242*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
243*61c4878aSAndroid Build Coastguard Worker ASSERT_EQ(result.status(), pw::Status::Internal());
244*61c4878aSAndroid Build Coastguard Worker }
245*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithSampleAtMaxCornerCase)246*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithSampleAtMaxCornerCase) {
247*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
248*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kCornerLimitsMin, .max = kCornerLimitsMax},
249*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kCornerReferenceMaxVoltageUv,
250*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kCornerReferenceMinVoltageUv});
251*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kCornerLimitsMax);
252*61c4878aSAndroid Build Coastguard Worker
253*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
254*61c4878aSAndroid Build Coastguard Worker ASSERT_EQ(result.status(), pw::Status::Internal());
255*61c4878aSAndroid Build Coastguard Worker }
256*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithInvertedReferenceAtMax)257*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithInvertedReferenceAtMax) {
258*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
259*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kInvertedLimitsMin, .max = kInvertedLimitsMax},
260*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kInvertedReferenceMaxVoltageUv,
261*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kInvertedReferenceMinVoltageUv});
262*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kInvertedLimitsMax);
263*61c4878aSAndroid Build Coastguard Worker
264*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
265*61c4878aSAndroid Build Coastguard Worker ASSERT_EQ(result.status(), pw::Status::Internal());
266*61c4878aSAndroid Build Coastguard Worker }
267*61c4878aSAndroid Build Coastguard Worker
TEST(MicrovoltInputTest,ReadMicrovoltsWithInvertedReferenceAtMin)268*61c4878aSAndroid Build Coastguard Worker TEST(MicrovoltInputTest, ReadMicrovoltsWithInvertedReferenceAtMin) {
269*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput voltage_input =
270*61c4878aSAndroid Build Coastguard Worker TestMicrovoltInput({.min = kInvertedLimitsMin, .max = kInvertedLimitsMax},
271*61c4878aSAndroid Build Coastguard Worker {.max_voltage_uv = kInvertedReferenceMaxVoltageUv,
272*61c4878aSAndroid Build Coastguard Worker .min_voltage_uv = kInvertedReferenceMinVoltageUv});
273*61c4878aSAndroid Build Coastguard Worker voltage_input.SetSampleValue(kInvertedLimitsMin);
274*61c4878aSAndroid Build Coastguard Worker
275*61c4878aSAndroid Build Coastguard Worker Result<int32_t> result = voltage_input.TryReadMicrovoltsFor(kTimeout);
276*61c4878aSAndroid Build Coastguard Worker ASSERT_EQ(result.status(), pw::Status::Internal());
277*61c4878aSAndroid Build Coastguard Worker }
278*61c4878aSAndroid Build Coastguard Worker
279*61c4878aSAndroid Build Coastguard Worker } // namespace
280*61c4878aSAndroid Build Coastguard Worker } // namespace analog
281*61c4878aSAndroid Build Coastguard Worker } // namespace pw
282