xref: /llvm-project/flang/test/Evaluate/fold-mod.f90 (revision f0896911570eae97507f9e3ccf2732182404981e)
1! RUN: %python %S/test_folding.py %s %flang_fc1
2! Tests folding of integer and real MOD and MODULO
3module m1
4  logical, parameter :: test_mod_i1 = mod(8, 5) == 3
5  logical, parameter :: test_mod_i2 = mod(-8, 5) == -3
6  logical, parameter :: test_mod_i3 = mod(8, -5) == 3
7  logical, parameter :: test_mod_i4 = mod(-8, -5) == -3
8
9  logical, parameter :: test_mod_r1 = mod(3., 2.) == 1.
10  logical, parameter :: test_mod_r2 = mod(8., 5.) == 3.
11  logical, parameter :: test_mod_r3 = mod(-8., 5.) == -3.
12  logical, parameter :: test_mod_r4 = mod(8., -5.) == 3.
13  logical, parameter :: test_mod_r5 = mod(-8., -5.) == -3.
14
15  logical, parameter :: test_mod_r10a = mod(huge(0.), tiny(0.)) == 0.
16  logical, parameter :: test_mod_r10b = sign(1., mod(huge(0.), tiny(0.))) == 1.
17  logical, parameter :: test_mod_r11a = mod(-huge(0.), tiny(0.)) == 0.
18  logical, parameter :: test_mod_r11b = sign(1., mod(-huge(0.), tiny(0.))) == -1.
19  logical, parameter :: test_mod_r12a = mod(huge(0.), -tiny(0.)) == 0.
20  logical, parameter :: test_mod_r12b = sign(1., mod(huge(0.), -tiny(0.))) == 1.
21  logical, parameter :: test_mod_r13a = mod(huge(0.), tiny(0.)) == 0.
22  logical, parameter :: test_mod_r13b = sign(1., mod(-huge(0.), -tiny(0.))) == -1.
23
24  logical, parameter :: test_modulo_i1 = modulo(8, 5) == 3
25  logical, parameter :: test_modulo_i2 = modulo(-8, 5) == 2
26  logical, parameter :: test_modulo_i3 = modulo(8, -5) == -2
27  logical, parameter :: test_modulo_i4 = modulo(-8, -5) == -3
28
29  logical, parameter :: test_modulo_r1 = modulo(8., 5.) == 3.
30  logical, parameter :: test_modulo_r2 = modulo(-8., 5.) == 2.
31  logical, parameter :: test_modulo_r3 = modulo(8., -5.) == -2.
32  logical, parameter :: test_modulo_r4 = modulo(-8., -5.) == -3.
33
34  logical, parameter :: test_modulo_r10a = modulo(huge(0.), tiny(0.)) == 0.
35  logical, parameter :: test_modulo_r10b = sign(1., modulo(huge(0.), tiny(0.))) == 1.
36  logical, parameter :: test_modulo_r11a = modulo(-huge(0.), tiny(0.)) == 0.
37  logical, parameter :: test_modulo_r11b = sign(1., modulo(-huge(0.), tiny(0.))) == 1.
38  logical, parameter :: test_modulo_r12a = modulo(huge(0.), -tiny(0.)) == 0.
39  logical, parameter :: test_modulo_r12b = sign(1., modulo(huge(0.), -tiny(0.))) == -1.
40  logical, parameter :: test_modulo_r13a = modulo(huge(0.), tiny(0.)) == 0.
41  logical, parameter :: test_modulo_r13b = sign(1., modulo(-huge(0.), -tiny(0.))) == -1.
42
43  logical, parameter :: test_mod_r14 = mod(1e22, 1.7) == .99592876
44  logical, parameter :: test_modulo_r14 = modulo(1e22, -1.7) == -.7040713
45
46end module
47