1program tmoddiv3;
2
3const
4  TestValues: array[0..9] of LongWord = (500, 1, 0, 995, $7FFFFFFF, $80000000, $80000001, $80000002, $FFFFFFFF, 1000000);
5
6const
7  ExpectedResults: array[0..9,1..16] of LongWord = (
8    (0,500,500,0,166,2,0,500,0,500,0,500,0,500,0,500),
9    (0,1,1,0,0,1,0,1,0,1,0,1,0,1,0,1),
10    (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
11    (0,995,995,0,331,2,0,995,0,995,0,995,0,995,0,995),
12    (2147483,647,2147483647,0,715827882,1,524287,4095,1,0,0,2147483647,0,2147483647,0,2147483647),
13    (2147483,648,2147483648,0,715827882,2,524288,0,1,1,1,0,0,2147483648,0,2147483648),
14    (2147483,649,2147483649,0,715827883,0,524288,1,1,2,1,1,1,0,0,2147483649),
15    (2147483,650,2147483650,0,715827883,1,524288,2,1,3,1,2,1,1,0,2147483650),
16    (4294967,295,4294967295,0,1431655765,0,1048575,4095,2,1,1,2147483647,1,2147483646,1,0),
17    (1000,0,1000000,0,333333,1,244,576,0,1000000,0,1000000,0,1000000,0,1000000));
18
19var
20  X, Y, C, Col: LongWord;
21
22procedure DoCheck;
23  begin
24    if Y<>ExpectedResults[C,Col] then
25      begin
26        writeln('Error at ',C,' ',Col);
27        halt(1);
28      end;
29    Inc(Col);
30  end;
31
32begin
33  for C := Low(TestValues) to High(TestValues) do
34  begin
35    X := TestValues[C];
36    Col := 1;
37
38    Y := X div 1000;
39    Write(Y,',');
40    DoCheck;
41
42    Y := X mod 1000;
43    Write(Y,',');
44    DoCheck;
45
46    Y := X div 1;
47    Write(Y,',');
48    DoCheck;
49
50    Y := X mod 1;
51    Write(Y,',');
52    DoCheck;
53
54    Y := X div 3;
55    Write(Y,',');
56    DoCheck;
57
58    Y := X mod 3;
59    Write(Y,',');
60    DoCheck;
61
62    Y := X div $1000;
63    Write(Y,',');
64    DoCheck;
65
66    Y := X mod $1000;
67    Write(Y,',');
68    DoCheck;
69
70    Y := X div $7FFFFFFF;
71    Write(Y,',');
72    DoCheck;
73
74    Y := X mod $7FFFFFFF;
75    Write(Y,',');
76    DoCheck;
77
78    Y := X div $80000000;
79    Write(Y,',');
80    DoCheck;
81
82    Y := X mod $80000000;
83    Write(Y,',');
84    DoCheck;
85
86    Y := X div $80000001;
87    Write(Y,',');
88    DoCheck;
89
90    Y := X mod $80000001;
91    Write(Y,',');
92    DoCheck;
93
94    Y := X div $FFFFFFFF;
95    Write(Y,',');
96    DoCheck;
97
98    Y := X mod $FFFFFFFF;
99    Writeln(Y);
100    DoCheck;
101  end;
102  writeln('ok');
103end.
104