Skip to content

Commit be6d45d

Browse files
OpenHTF Ownerscopybara-github
authored andcommitted
Add an assertMeasuredAlmostEqual function to use with floats.
PiperOrigin-RevId: 766756498
1 parent b3a56ee commit be6d45d

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

openhtf/util/test.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,22 @@ def assertMeasured(self, phase_record, measurement, value=mock.ANY):
936936
(measurement, value,
937937
phase_record.measurements[measurement].measured_value.value))
938938

939+
@_assert_phase_or_test_record
940+
def assertMeasuredAlmostEqual(
941+
self, phase_record, measurement, value, delta=None
942+
):
943+
self.assertMeasured(phase_record, measurement)
944+
measured_value = phase_record.measurements[measurement].measured_value.value
945+
self.assertAlmostEqual(
946+
value,
947+
measured_value,
948+
delta=delta,
949+
msg=(
950+
f'Measurement {measurement} has wrong value: expected {value}, got'
951+
f' {measured_value}, tolerance {delta}'
952+
),
953+
)
954+
939955
@_assert_phase_or_test_record
940956
def assertMeasurementPass(self, phase_record, measurement, value=mock.ANY):
941957
self.assertMeasured(phase_record, measurement, value)

test/util/test_test.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def plug_away(self):
6666

6767

6868
@plugs.plug(my_plug=MyPlug, shameless_plug=ShamelessPlug)
69-
@openhtf.measures('test_measurement', 'othr_measurement')
69+
@openhtf.measures('test_measurement', 'othr_measurement', 'numeric_measurement')
7070
@openhtf.measures('passes', validators=[validators.in_range(1, 10)])
7171
@openhtf.measures('fails', validators=[validators.in_range(1, 10)])
7272
@openhtf.measures('unset_measurement')
@@ -76,6 +76,7 @@ def test_phase(phase_data, my_plug, shameless_plug: ShamelessPlug):
7676
phase_data.logger.error('in measurements %s', id(phase_data.measurements))
7777
phase_data.measurements.test_measurement = my_plug.do_stuff('stuff_args')
7878
phase_data.measurements.othr_measurement = 0xDEAD
79+
phase_data.measurements.numeric_measurement = 10.0
7980
phase_data.measurements.passes = 5
8081
phase_data.measurements.fails = 20
8182
phase_data.test_record.add_outcome_details(0xBED)
@@ -165,6 +166,12 @@ def _run_my_phase_in_test_asserts(self, mock_my_plug, test_record):
165166
self.assertMeasurementFail(test_record, 'fails')
166167
with self.subTest(name='assert_measurement_fail_with_value'):
167168
self.assertMeasurementFail(test_record, 'fails', 20)
169+
with self.subTest(name='assert_measurement_almost_equal'):
170+
self.assertMeasuredAlmostEqual(test_record, 'numeric_measurement', 10.0)
171+
with self.subTest(name='assert_measurement_almost_equal_with_delta'):
172+
self.assertMeasuredAlmostEqual(
173+
test_record, 'numeric_measurement', 9.5, delta=1.0
174+
)
168175

169176
def test_execute_phase_or_test_test_with_patched_plugs(self):
170177
self.auto_mock_plugs(MyPlug)
@@ -202,6 +209,7 @@ def test_patch_plugs_phase(self, mock_plug):
202209
self.assertMeasured(phase_record, 'othr_measurement', 0xDEAD)
203210
self.assertMeasurementPass(phase_record, 'passes')
204211
self.assertMeasurementFail(phase_record, 'fails')
212+
self.assertMeasuredAlmostEqual(phase_record, 'numeric_measurement', 10.0)
205213

206214
@test.patch_plugs(mock_plug='.'.join((MyPlug.__module__, MyPlug.__name__)))
207215
def test_patch_plugs_test(self, mock_plug):
@@ -222,6 +230,24 @@ def test_wrong_measured_value(self):
222230
test_rec = yield openhtf.Test(phase_retval(None))
223231
self.assertMeasured(test_rec, 'test_measurement', 0xBAD)
224232

233+
@unittest.expectedFailure
234+
@test.patch_plugs(mock_plug='.'.join((MyPlug.__module__, MyPlug.__name__)))
235+
def test_wrong_measured_almost_equal_value(self, mock_plug):
236+
mock_plug.do_stuff.return_value = _DO_STUFF_RETVAL
237+
238+
test_record = yield openhtf.Test(phase_retval(None), test_phase)
239+
self.assertMeasuredAlmostEqual(test_record, 'numeric_measurement', 9.0)
240+
241+
@unittest.expectedFailure
242+
@test.patch_plugs(mock_plug='.'.join((MyPlug.__module__, MyPlug.__name__)))
243+
def test_wrong_measured_almost_equal_value_with_delta(self, mock_plug):
244+
mock_plug.do_stuff.return_value = _DO_STUFF_RETVAL
245+
246+
test_record = yield openhtf.Test(phase_retval(None), test_phase)
247+
self.assertMeasuredAlmostEqual(
248+
test_record, 'numeric_measurement', 9.5, delta=0.1
249+
)
250+
225251
@test.yields_phases
226252
def test_passing_test(self):
227253
test_record = yield openhtf.Test(phase_retval(None))

0 commit comments

Comments
 (0)