float_significands_oracle_test.py (1205B)
1 #!/usr/bin/env python3 2 """Cross-check the benchmark oracle using exact rational arithmetic.""" 3 from fractions import Fraction 4 import unittest 5 6 from float_significands import rounded, shifted, chained 7 8 9 class OracleTests(unittest.TestCase): 10 def test_exhaustive_small_distance_and_parity(self): 11 for n in range(256): 12 for k in range(10): 13 exact = Fraction(n, 2**k) 14 nearest = min(range(n//(2**k)+2), 15 key=lambda q: (abs(q-exact), q % 2)) 16 self.assertEqual(rounded(n,k), (nearest,exact.denominator != 1)) 17 self.assertEqual(shifted(n,k), (n//2**k,bool(n % 2**k))) 18 19 def test_huge_counts_and_zero(self): 20 for operation in [rounded,shifted]: 21 self.assertEqual(operation(1,1 << 128), (0,True)) 22 self.assertEqual(operation(0,1 << 128), (0,False)) 23 self.assertEqual(operation(7,0), (7,False)) 24 25 def test_chain_is_not_single_rounding(self): 26 # Deliberately preserve operation-by-operation rounding in the workload. 27 self.assertEqual(chained(5,1), 0) 28 self.assertEqual(rounded(5,3)[0], 1) 29 30 31 if __name__ == '__main__': 32 unittest.main()