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.
|