aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gm2/extensions/pass/int64p.mod
blob: 4ad297170412068ac0de0e3622a446a11e76ecc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
MODULE int64p ; 


FROM libc IMPORT exit, write ;
FROM ASCII IMPORT nul, nl ;
FROM SYSTEM IMPORT ADR,
                   INTEGER8, INTEGER16, INTEGER32, INTEGER64,
                   CARDINAL8, CARDINAL16, CARDINAL32, CARDINAL64,
                   BYTE, WORD16, WORD32, WORD64 ;
FROM M2RTS IMPORT Length ;
FROM NumberIO IMPORT CardToStr ;

   
PROCEDURE Assert (c: BOOLEAN; line: CARDINAL; column: CARDINAL;
                  message: ARRAY OF CHAR) ;
VAR
   r: INTEGER ;
   a: ARRAY [0..10] OF CHAR ;
BEGIN
   IF NOT c
   THEN
      r := write(2, ADR(__FILE__), Length(__FILE__)) ;
      r := write(2, ADR(": "), Length(":")) ;
      CardToStr(line, 0, a) ;
      r := write(2, ADR(a), Length(a)) ;
      r := write(2, ADR(": "), Length(":")) ;
      CardToStr(column, 0, a) ;
      r := write(2, ADR(a), Length(a)) ;
      r := write(2, ADR(": "), Length(":")) ;
      r := write(2, ADR(message), Length(message)) ;
      a[0] := nl ;
      a[1] := nul ;
      r := write(2, ADR(a), Length(a)) ;
      e := 1
   END
END Assert ;

VAR
   e  : INTEGER ;
   z: (zero, one, two) ;

   c8 : CARDINAL8 ;
   w8 : BYTE ;
   i8 : INTEGER8 ;

   c16: CARDINAL16 ;
   i16: INTEGER16 ;
   w16: WORD16 ;

   c32: CARDINAL32 ;
   i32: INTEGER32 ;
   w32: WORD32 ;

   c64: CARDINAL64 ;
   i64: INTEGER64 ;
   w64: WORD64 ;
   i, j: INTEGER64;
BEGIN
   e := 0 ;

   i := 0 ;
   INC(i) ;
   Assert(i=1, __LINE__, __COLUMN__, "INC failed to generate value of 1") ;
   i8 := i ;
   Assert(i8=1, __LINE__, __COLUMN__, "assignment failed to propagate via INTEGER8") ;
   c8 := i ;
   Assert(c8=1, __LINE__, __COLUMN__, "assignment failed to propagate via CARDINAL8") ;

   i16 := i ;
   Assert(i16=1, __LINE__, __COLUMN__, "assignment failed to propagate via INTEGER16") ;
   c16 := i ;
   Assert(c16=1, __LINE__, __COLUMN__, "assignment failed to propagate via CARDINAL16") ;

   i32 := i ;
   Assert(i32=1, __LINE__, __COLUMN__, "assignment failed to propagate via INTEGER32") ;
   c32 := i ;
   Assert(c32=1, __LINE__, __COLUMN__, "assignment failed to propagate via CARDINAL32") ;

   i64 := i ;
   Assert(i64=1, __LINE__, __COLUMN__, "assignment failed to propagate via INTEGER64") ;
   c64 := i ;
   Assert(c64=1, __LINE__, __COLUMN__, "assignment failed to propagate via CARDINAL64") ;

   DEC(i) ;
   Assert(i=0, __LINE__, __COLUMN__, "DEC failed to generate value of 0") ;
   j := 1 ;
   INC(i, j) ;
   Assert(i=1, __LINE__, __COLUMN__, "INC failed to generate value of 1") ;
   DEC(i, j) ;
   Assert(i=0, __LINE__, __COLUMN__, "DEC failed to generate value of 0") ;
   INC(i, one) ;
   Assert(i=1, __LINE__, __COLUMN__, "INC failed to generate value of 1") ;
   DEC(i, one) ;
   Assert(i=0, __LINE__, __COLUMN__, "DEC failed to generate value of 0") ;
   i := MAX(INTEGER64) ;
   j := i ;
   DEC(i) ;
   Assert(i=j-1, __LINE__, __COLUMN__, "DEC failed to generate value of MAX(dataType)-1") ;
   DEC(i, 1) ;
   Assert(i=j-2, __LINE__, __COLUMN__, "DEC failed to generate value of MAX(dataType)-2") ;

   i := 0 ;
   j := 1 ;
   DEC(i) ;
   Assert(i=-1, __LINE__, __COLUMN__, "DEC failed to generate value of -1") ;
   DEC(i, j) ;
   Assert(i=-2, __LINE__, __COLUMN__, "DEC failed to generate value of -2") ;
   INC(i) ;
   Assert(i=-1, __LINE__, __COLUMN__, "DEC failed to generate value of -1") ;
   INC(i, j) ;
   Assert(i=0, __LINE__, __COLUMN__, "DEC failed to generate value of 0") ;
   i := MIN(INTEGER64) ;
   j := i ;
   INC(i) ;
   Assert(i=j+1, __LINE__, __COLUMN__, "DEC failed to generate value of MIN(dataType)+1") ;
   INC(i, 1) ;
   Assert(i=j+2, __LINE__, __COLUMN__, "DEC failed to generate value of MIN(dataType)+2") ;
   exit(e) ;
END int64p.