a test for sf bug 422177 manifest float constants varied way too much in precision depending on whether python was loading a module for the first time or reloading it from a precompiled pyc the expected failure mode is that when testimport imports this after all pyc files have been erased it passes but when testimport imports this from doubleconst pyc it fails this indicates a woeful loss of precision in the marshal format for doubles it s also possible that repr doesn t produce enough digits to get reasonable precision for this box verify that the double x is within a few bits of evalxstr if diff is no larger than 3 ulp wrt x2 then diff8 is no larger than 0 375 ulp so adding diff8 to x2 should have no effect a test for sf bug 422177 manifest float constants varied way too much in precision depending on whether python was loading a module for the first time or reloading it from a precompiled pyc the expected failure mode is that when test_import imports this after all pyc files have been erased it passes but when test_import imports this from double_const pyc it fails this indicates a woeful loss of precision in the marshal format for doubles it s also possible that repr doesn t produce enough digits to get reasonable precision for this box verify that the double x is within a few bits of eval x_str if diff is no larger than 3 ulp wrt x2 then diff 8 is no larger than 0 375 ulp so adding diff 8 to x2 should have no effect
from test.support import TestFailed










PI    = 3.14159265358979324
TWOPI = 6.28318530717958648

PI_str    = "3.14159265358979324"
TWOPI_str = "6.28318530717958648"


def check_ok(x, x_str):
    assert x > 0.0
    x2 = eval(x_str)
    assert x2 > 0.0
    diff = abs(x - x2)
    
    
    if x2 + (diff / 8.) != x2:
        raise TestFailed("Manifest const %s lost too much precision " % x_str)

check_ok(PI, PI_str)
check_ok(TWOPI, TWOPI_str)