tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

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()