URL: <http://savannah.nongnu.org/bugs/?47629>
Summary: adc_diff_t25 tests 00 and 02 fail on 64bit Ubuntu 14.04 Project: Simulavr: an AVR simulator Submitted by: None Submitted on: Втр 05 Апр 2016 20:38:41 Category: Test Suite Severity: 3 - Normal Item Group: None Status: None Privacy: Public Assigned to: None Originator Email: igor.a.permi...@gmail.com Open/Closed: Open Discussion Lock: Any Component Version: simulavr _______________________________________________________ Details: Simulavr version: rel-1.1 branch (commit: 4d3c8c0fae3efa95) Test suite fails on 64bit Ubuntu 14.04 with following errors: ====================================================================== FAIL: test_00 (adc_diff_t25.TestCase) adc_diff_t25_attiny25::check adc conversion, differential channel, bipolar mode ---------------------------------------------------------------------- Traceback (most recent call last): File "adc_diff_t25.py", line 83, in test_00 self.assertValue(0.8, 1.0, 2.56, False) File "adc_diff_t25.py", line 52, in assertValue self.assertEqual(v, e, "expected adc value is 0x%x, got 0x%x" % (e, v)) AssertionError: expected adc value is 0x3d9, got 0x3d8 ====================================================================== FAIL: test_02 (adc_diff_t25.TestCase) adc_diff_t25_attiny25::check adc conversion, differential channel, unipolar mode with IPR ---------------------------------------------------------------------- Traceback (most recent call last): File "adc_diff_t25.py", line 147, in test_02 self.assertValue(1.0, 0.8, 2.56) File "adc_diff_t25.py", line 52, in assertValue self.assertEqual(v, e, "expected adc value is 0x%x, got 0x%x" % (e, v)) AssertionError: expected adc value is 0x4f, got 0x50 == Environment == Ubuntu 14.04.4 LTS (GNU/Linux 4.2.0-27-generic x86_64) $ uname -a Linux ubuntu64 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux $ gcc --version gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4 $ python --version Python 2.7.6 == Investigation == Floating point calculations give slightly different result in C++ Simulavr code and in Python tests. And after truncation of the fractional part, integer results differ by 1. The code from adc_diff_t25.py: def assertValue(self, pValue, nValue, refValue, unipolar = True): if unipolar: rng = 1024 else: rng = 512 v = self.sim.getWordByName(self.dev, "adc_value") e = int(((pValue - nValue) / refValue) * rng) & 0x3ff self.assertEqual(v, e, "expected adc value is 0x%x, got 0x%x" % (e, v)) Failure in test_00 is caused by following values: v = 984 ((pValue - nValue) / refValue) * rng = -39.9999999999999929 (after truncation to int becomes -39 and not -40) Failure in test_02 is caused by following values: v = 80 ((pValue - nValue) / refValue) * rng = 79.9999999999999858 (after truncation to int becomes 79 and not 80) Probably, the behavior described here takes place: [http://www.viva64.com/en/b/0074/] == Solution == Test voltage value(s) should be adjusted to produce a more stable result (I've changed 0.8 to 0.79999). The patch attached. Best regards, Igor A. Perminov _______________________________________________________ File Attachments: ------------------------------------------------------- Date: Втр 05 Апр 2016 20:38:41 Name: fix_regress_amd64.patch Size: 1kB By: None <http://savannah.nongnu.org/bugs/download.php?file_id=36843> _______________________________________________________ Reply to this item at: <http://savannah.nongnu.org/bugs/?47629> _______________________________________________ Message sent via/by Savannah http://savannah.nongnu.org/ _______________________________________________ Simulavr-devel mailing list Simulavr-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/simulavr-devel