@@ -805,14 +805,28 @@ def _test_utime(self, set_time, filename=None):
805
805
set_time (filename , (atime_ns , mtime_ns ))
806
806
st = os .stat (filename )
807
807
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 )
811
821
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 )
816
830
817
831
def test_utime (self ):
818
832
def set_time (filename , ns ):
0 commit comments