test: fix most failures on 32 bit
authorAshley Yakeley <ashley@localhost.localdomain>
Sat, 11 Mar 2017 17:43:13 +0000 (09:43 -0800)
committerAshley Yakeley <ashley@localhost.localdomain>
Sat, 11 Mar 2017 17:43:13 +0000 (09:43 -0800)
test/main/Main.hs
test/unix/Main.hs
test/unix/Test/Format/Format.hs

index 5c40256..2d02b4a 100644 (file)
@@ -45,8 +45,4 @@ tests = testGroup "Time" [
     ]
 
 main :: IO ()
-main = do
-  if (toRational (1000000000000 :: CTime)) /= (1000000000000 :: Rational)
-    then putStrLn "WARNING: Some tests will incorrectly fail due to a 32-bit time_t C type."
-    else return ()
-  defaultMain tests
+main = defaultMain tests
index f2bac52..eac8ac0 100644 (file)
@@ -17,8 +17,4 @@ tests = testGroup "Time" [
     ]
 
 main :: IO ()
-main = do
-  if (toRational (1000000000000 :: CTime)) /= (1000000000000 :: Rational)
-    then putStrLn "WARNING: Some tests will incorrectly fail due to a 32-bit time_t C type."
-    else return ()
-  defaultMain tests
+main = defaultMain tests
index 1f8ec4a..753371c 100644 (file)
@@ -56,7 +56,16 @@ times :: Gen UTCTime
 times = do
     day <- choose (-25000,75000)
     time <- return midnight
-    return $ localTimeToUTC utc $ LocalTime (ModifiedJulianDay day) time
+    let
+        -- verify that the created time can fit in the local CTime
+        localT = LocalTime (ModifiedJulianDay day) time
+        utcT = localTimeToUTC utc localT
+        secondsInteger = truncate (utcTimeToPOSIXSeconds utcT)
+        CTime secondsCTime = fromInteger secondsInteger
+        secondsInteger' = toInteger secondsCTime
+    if secondsInteger == secondsInteger'
+      then return utcT
+      else times
 
 padN :: Int -> Char -> String -> String
 padN n _ s | n <= (length s) = s