diff options
Diffstat (limited to 'testsuite/tests/numeric/should_run/arith004.hs')
-rw-r--r-- | testsuite/tests/numeric/should_run/arith004.hs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/testsuite/tests/numeric/should_run/arith004.hs b/testsuite/tests/numeric/should_run/arith004.hs new file mode 100644 index 0000000000..68e601128e --- /dev/null +++ b/testsuite/tests/numeric/should_run/arith004.hs @@ -0,0 +1,86 @@ +-- !!! test quot/rem/div/mod functions on Ints and Integers +-- +main + = putStr + (-- w/ Ints and Integers + show (unzipWith div ints_list) + ++ "\n" + ++ show (unzipWith div integers_list) + ++ "\n" + ++ show (unzipWith rem ints_list) + ++ "\n" + ++ show (unzipWith rem integers_list) + ++ "\n" + ++ show (unzipWith quot ints_list) + ++ "\n" + ++ show (unzipWith quot integers_list) + ++ "\n" + ++ show (unzipWith mod ints_list) + ++ "\n" + ++ show (unzipWith mod integers_list) + ++ "\n" + ++ show (unzipWith law1 ints_list) + ++ "\n" + ++ show (unzipWith law1 integers_list) + ++ "\n" + ++ show (unzipWith law2 ints_list) + ++ "\n" + ++ show (unzipWith law2 integers_list) + ++ "\n" + ) + where + ints_list :: [(Int, Int)] + integers_list :: [(Integer, Integer)] + + ints_list = [ + (0, 4), + (0, -8), + (7, 3), + (13, 4), + (13, -4), + (-13, 4), + (-13, -4), + (12345678, 10000), + (12345678, -10000), + (-12345678, 10000), + (-12345678, -10000), + (123456,10000), + (1234567,20000), + (12345678,-10000), + (123456789,10000), + (1234567890,-10000), + (-12345,10000), + (-123456789,-10000) + ] + + integers_list = [ + (0, 4), + (0, -8), + (7, 3), + (13, 4), + (13, -4), + (-13, 4), + (-13, -4), + (12345678, 10000), + (12345678, -10000), + (-12345678, 10000), + (-12345678, -10000), + (123456,10000), + (1234567,20000), + (12345678,-10000), + (123456789,10000), + (1234567890,-10000), + (-12345,10000), + (-123456789,-10000), + (12345678900,500000000), + (1234000000000000000000005678900,5001111111111111000000) + ] + +unzipWith :: (a -> b -> c) -> [(a,b)] -> [c] +unzipWith f [] = [] +unzipWith f ((x,y):zs) = f x y : unzipWith f zs + +law1, law2 :: Integral a => a -> a -> Bool + +law1 x y = (x `quot` y)*y + (x `rem` y) == x +law2 x y = (x `div` y)*y + (x `mod` y) == x |