@@ -805,14 +805,28 @@ def _test_utime(self, set_time, filename=None):
805805 set_time (filename , (atime_ns , mtime_ns ))
806806 st = os .stat (filename )
807807
808- if support_subsecond :
809- self .assertAlmostEqual (st .st_atime , atime_ns * 1e-9 , delta = 1e-6 )
810- self .assertAlmostEqual (st .st_mtime , mtime_ns * 1e-9 , delta = 1e-6 )
808+ if support .is_emscripten :
809+ # Emscripten timestamps are roundtripped through a 53 bit integer of
810+ # nanoseconds. If we want to represent ~50 years which is an 11
811+ # digits number of seconds:
812+ # 2*log10(60) + log10(24) + log10(365) + log10(60) + log10(50)
813+ # is about 11. Because 53 * log10(2) is about 16, we only have 5
814+ # digits worth of sub-second precision.
815+ # Some day it would be good to fix this upstream.
816+ delta = 1e-5
817+ self .assertAlmostEqual (st .st_atime , atime_ns * 1e-9 , delta = 1e-5 )
818+ self .assertAlmostEqual (st .st_mtime , mtime_ns * 1e-9 , delta = 1e-5 )
819+ self .assertAlmostEqual (st .st_atime_ns , atime_ns , delta = 1e9 * 1e-5 )
820+ self .assertAlmostEqual (st .st_mtime_ns , mtime_ns , delta = 1e9 * 1e-5 )
811821 else :
812- self .assertEqual (st .st_atime , atime_ns * 1e-9 )
813- self .assertEqual (st .st_mtime , mtime_ns * 1e-9 )
814- self .assertEqual (st .st_atime_ns , atime_ns )
815- self .assertEqual (st .st_mtime_ns , mtime_ns )
822+ if support_subsecond :
823+ self .assertAlmostEqual (st .st_atime , atime_ns * 1e-9 , delta = 1e-6 )
824+ self .assertAlmostEqual (st .st_mtime , mtime_ns * 1e-9 , delta = 1e-6 )
825+ else :
826+ self .assertEqual (st .st_atime , atime_ns * 1e-9 )
827+ self .assertEqual (st .st_mtime , mtime_ns * 1e-9 )
828+ self .assertEqual (st .st_atime_ns , atime_ns )
829+ self .assertEqual (st .st_mtime_ns , mtime_ns )
816830
817831 def test_utime (self ):
818832 def set_time (filename , ns ):
0 commit comments