]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gm2/switches/iso/run/pass/modulus.mod
Merge modula-2 front end onto gcc.
[thirdparty/gcc.git] / gcc / testsuite / gm2 / switches / iso / run / pass / modulus.mod
1 (* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. *)
2 (* This file is part of GNU Modula-2.
3
4 GNU Modula-2 is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
7 version.
8
9 GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 for more details.
13
14 You should have received a copy of the GNU General Public License along
15 with gm2; see the file COPYING. If not, write to the Free Software
16 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *)
17
18 MODULE modulus ;
19
20 FROM libc IMPORT exit, printf ;
21 FROM SYSTEM IMPORT ADR ;
22
23 VAR
24 res: INTEGER ;
25
26
27 PROCEDURE Assert (r: INTEGER; v: BOOLEAN; f: ARRAY OF CHAR; l: CARDINAL; e: ARRAY OF CHAR) ;
28 VAR
29 c: INTEGER ;
30 BEGIN
31 IF v
32 THEN
33 c := printf("successfully evaluated %s as %d\n", ADR(e), r)
34 ELSE
35 c := printf("%s:%d assertion failed when evaluating %s as %d\n", ADR(f), l, ADR(e), r) ;
36 res := 1
37 END
38 END Assert ;
39
40
41 VAR
42 i: INTEGER ;
43 BEGIN
44 res := 0 ;
45
46 (* example from ISO Standard 6-7 *)
47 i := 31 MOD 10 ;
48 Assert(i, i=1, __FILE__, __LINE__, "31 MOD 10") ;
49
50 (* example from PIM 4th edition *)
51 i := (-15) MOD 4 ;
52 Assert(i, i=1, __FILE__, __LINE__, "(-15) DIV 4") ;
53
54 (* example from ISO Standard 6-7 *)
55 i := (-31) MOD 10 ;
56 Assert(i, i=9, __FILE__, __LINE__, "(-31) MOD 9") ;
57
58 (* example from ISO Standard 6-7 *)
59 i := (-31) DIV 10 ;
60 Assert(i, i=-4, __FILE__, __LINE__, "(-31) DIV 10") ;
61
62 (* example from ISO Standard 6-7 *)
63 i := 31 REM 10 ;
64 Assert(i, i=1, __FILE__, __LINE__, "31 REM 10") ;
65 i := 31 REM (-10) ;
66 Assert(i, i=1, __FILE__, __LINE__, "31 REM (-10)") ;
67 i := (-31) REM 10 ;
68 Assert(i, i=-1, __FILE__, __LINE__, "(-31) REM 10") ;
69 i := (-31) REM (-10) ;
70 Assert(i, i=-1, __FILE__, __LINE__, "(-31) REM (-10)") ;
71
72 (* example from ISO Standard 6-7 *)
73 i := (-31) / 10 ;
74 Assert(i, i=-3, __FILE__, __LINE__, "(-31) / 10") ;
75 exit(res)
76 END modulus.