[project @ 2000-01-19 17:08:02 by simonmar]
[ghc-hetmet.git] / ghc / tests / numeric / should_run / arith003.hs
1 -- !!! test arithmetic operations from "Prelude" (gcd, lcm, etc.)
2 --
3 main
4   = putStr
5        (-- w/ Ints
6         show [
7             minInt, maxInt,
8
9             subtract i8 i4,
10             subtract i8m i4,
11             subtract maxInt i4,
12             subtract i0 minInt,
13
14             gcd i8 i6,
15             gcd i8m i6,
16             gcd i8m i6m,
17             gcd i8m i0,
18             gcd i0 i8m,
19             gcd (4070297::Int) (2695911::Int), -- 52,861
20     
21             lcm i8 i6,
22             lcm i8m i6,
23             lcm i8m i6m,
24             lcm i8m i0,
25             lcm i0 i8m,
26             lcm (4070297::Int) (2695911::Int), -- 207,585,147
27
28             i8 ^ i0,
29             i8m ^ i4,
30             i4 ^ i6
31             -- ToDo: more stuff
32
33             ]
34         ++ "\n"
35
36         ++ show [
37             quotRem i8 i6,
38             quotRem i8m i6,
39             quotRem i8m i6m,
40             -- quotRem i8m i0,  -- no div by zero
41             quotRem i0 i8m,
42             quotRem (4070297::Int) (2695911::Int), -- 52,861
43
44             divMod i8 i6,
45             divMod i8m i6,
46             divMod i8m i6m,
47             -- divMod i8m i0,  -- no div by zero
48             divMod i0 i8m,
49             divMod (4070297::Int) (2695911::Int) -- 52,861
50             ]
51         ++ "\n"
52
53         -- w/ Integers
54         ++ show [
55             minIntI, maxIntI,
56
57             subtract i8I i4I,
58             subtract i8mI i4I,
59             subtract maxIntI i4I,
60             subtract i0I minIntI,
61
62             gcd i8I i6I,
63             gcd i8mI i6I,
64             gcd i8mI i6mI,
65             gcd i8mI i0I,
66             gcd i0I i8mI,
67             gcd (4070297::Integer) (2695911::Integer), -- 52,861
68             gcd minIntI (-1),   -- out of Int range
69             gcd minIntI (1),
70             gcd (-1) minIntI,
71             gcd (1)  minIntI,
72             
73             lcm i8I i6I,
74             lcm i8mI i6I,
75             lcm i8mI i6mI,
76             lcm i8mI i0I,
77             lcm i0I i8mI,
78             lcm (4070297::Integer) (2695911::Integer), -- 207,585,147
79             lcm minIntI (-1),   -- out of Int range
80             lcm minIntI (1),
81             lcm (-1) minIntI,
82             lcm (1)  minIntI,
83
84             i8I ^ i0I,
85             i8mI ^ i4I,
86             i4I ^ i6I
87             -- ToDo: more stuff
88             ]
89         ++ "\n"
90         
91         ++ show [
92             quotRem i8I i6I,
93             quotRem i8mI i6I,
94             quotRem i8mI i6mI,
95             -- quotRem i8mI i0I,  -- no div by zero
96             quotRem i0I i8mI,
97             quotRem (4070297::Integer) (2695911::Integer), -- 52,861
98             quotRem minIntI (-1),   -- out of Int range
99             quotRem minIntI (1),
100             quotRem (-1) minIntI,
101             quotRem (1)  minIntI,
102
103             divMod i8I i6I,
104             divMod i8mI i6I,
105             divMod i8mI i6mI,
106             -- divMod i8mI i0I,  -- no div by zero
107             divMod i0I i8mI,
108             divMod (4070297::Integer) (2695911::Integer), -- 52,861
109             divMod minIntI (-1),   -- out of Int range
110             divMod minIntI (1),
111             divMod (-1) minIntI,
112             divMod (1)  minIntI
113             ]
114
115         ++ "\n"
116         )
117   where
118     i0, i4, i4m, i6, i6m, i8, i8m :: Int
119     i0 = 0
120     i4 = 4
121     i4m = -4
122     i6 = 6
123     i6m = -6
124     i8 = 8
125     i8m = -8
126
127     i0I, i4I, i4mI, i6I, i6mI, i8I, i8mI :: Integer
128     i0I = 0
129     i4I = 4
130     i4mI = -4
131     i6I = 6
132     i6mI = -6
133     i8I = 8
134     i8mI = -8
135
136 minInt = minBound :: Int
137 maxInt = maxBound :: Int
138
139 minIntI = fromIntegral minInt :: Integer
140 maxIntI = fromIntegral maxInt :: Integer