|
@@ -0,0 +1,169 @@
|
|
|
+program tb0604;
|
|
|
+
|
|
|
+{$mode objfpc}
|
|
|
+
|
|
|
+{.$define writeresults}
|
|
|
+
|
|
|
+procedure CheckResult(aActual, aExpected, aExitCode: LongInt);
|
|
|
+begin
|
|
|
+ if aActual <> aExpected then begin
|
|
|
+{$ifdef writeresults}
|
|
|
+ Writeln('Test ', aExitCode, ' failed. Result: ', aActual, ' Expected: ', aExpected);
|
|
|
+{$endif}
|
|
|
+ Halt(aExitCode);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestSimple1: LongInt;
|
|
|
+begin
|
|
|
+ case 4 of
|
|
|
+ 2: Result := 2;
|
|
|
+ 4: Result := 4;
|
|
|
+ 6: Result := 6;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestSimple2: LongInt;
|
|
|
+begin
|
|
|
+ case 8 of
|
|
|
+ 2: Result := 2;
|
|
|
+ 4: Result := 4;
|
|
|
+ 6: Result := 6;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestSimple3: LongInt;
|
|
|
+begin
|
|
|
+ case 1 of
|
|
|
+ 2: Result := 2;
|
|
|
+ 4: Result := 4;
|
|
|
+ 6: Result := 6;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestSimple4: LongInt;
|
|
|
+begin
|
|
|
+ case 3 of
|
|
|
+ 2: Result := 2;
|
|
|
+ 4: Result := 4;
|
|
|
+ 6: Result := 6;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestSimple5: LongInt;
|
|
|
+begin
|
|
|
+ case 3 of
|
|
|
+ 2: Result := 2;
|
|
|
+ 4: Result := 4;
|
|
|
+ 6: Result := 6;
|
|
|
+ end;
|
|
|
+ Result := 8;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange1: LongInt;
|
|
|
+begin
|
|
|
+ case 4 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange2: LongInt;
|
|
|
+begin
|
|
|
+ case 3 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange3: LongInt;
|
|
|
+begin
|
|
|
+ case 2 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange4: LongInt;
|
|
|
+begin
|
|
|
+ case 5 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange5: LongInt;
|
|
|
+begin
|
|
|
+ case 9 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestRange6: LongInt;
|
|
|
+begin
|
|
|
+ case 1 of
|
|
|
+ 2..4: Result := 3;
|
|
|
+ 6..8: Result := 7;
|
|
|
+ else
|
|
|
+ Result := 8;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestInlineFunc(a, b: LongInt): LongInt; inline;
|
|
|
+begin
|
|
|
+ case a of
|
|
|
+ 0..4:
|
|
|
+ Result := a * b;
|
|
|
+ 6..9:
|
|
|
+ Result := a + b;
|
|
|
+ end;
|
|
|
+
|
|
|
+ case b of
|
|
|
+ 0..4:
|
|
|
+ Result := Result - (a - b);
|
|
|
+ 6..9:
|
|
|
+ Result := Result * (a mod b);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TestInline: LongInt;
|
|
|
+begin
|
|
|
+ Result := TestInlineFunc(7, 3);
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ CheckResult(TestSimple1, 4, 1);
|
|
|
+ CheckResult(TestSimple2, 8, 2);
|
|
|
+ CheckResult(TestSimple3, 8, 3);
|
|
|
+ CheckResult(TestSimple4, 8, 4);
|
|
|
+ CheckResult(TestSimple5, 8, 5);
|
|
|
+ CheckResult(TestRange1, 3, 6);
|
|
|
+ CheckResult(TestRange2, 3, 7);
|
|
|
+ CheckResult(TestRange3, 3, 8);
|
|
|
+ CheckResult(TestRange4, 8, 9);
|
|
|
+ CheckResult(TestRange5, 8, 10);
|
|
|
+ CheckResult(TestRange6, 8, 11);
|
|
|
+ CheckResult(TestInline, 6, 121);
|
|
|
+{$ifdef writeresults}
|
|
|
+ Writeln('ok');
|
|
|
+{$endif}
|
|
|
+end.
|