|
@@ -0,0 +1,1256 @@
|
|
|
+program SetTests;
|
|
|
+
|
|
|
+{$APPTYPE CONSOLE}
|
|
|
+
|
|
|
+{$IFDEF FPC}
|
|
|
+ {$mode delphi}
|
|
|
+{$ENDIF}
|
|
|
+
|
|
|
+{$R+}
|
|
|
+{$Q+}
|
|
|
+
|
|
|
+uses
|
|
|
+ SysUtils;
|
|
|
+
|
|
|
+var
|
|
|
+ u8 : Byte;
|
|
|
+ s8 : ShortInt;
|
|
|
+ u16 : Word;
|
|
|
+ s16 : SmallInt;
|
|
|
+ u32 : LongWord;
|
|
|
+ s32 : LongInt;
|
|
|
+ u64 : QWord;
|
|
|
+ s64 : Int64;
|
|
|
+
|
|
|
+ LargeSet : set of 67..221;
|
|
|
+ SmallSet : set of 9..21;
|
|
|
+
|
|
|
+ Error : Boolean;
|
|
|
+
|
|
|
+procedure CheckResult(const s: string; aIs, aExpected: Boolean); overload;
|
|
|
+begin
|
|
|
+ if aIs <> aExpected then begin
|
|
|
+ WriteLn(s, aIs, ' <> ', aExpected, ' * * * ERROR * * * ERROR * * * ERROR * * *');
|
|
|
+ Error := True;
|
|
|
+ end else
|
|
|
+ WriteLn(s, aIs);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure CheckResult(const s: string; aIs: Boolean); overload;
|
|
|
+begin
|
|
|
+ WriteLn(s, aIs, ' <> EXCEPTION * * * ERROR * * * ERROR * * * ERROR * * *');
|
|
|
+ Error := True;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+begin
|
|
|
+ Error := False;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against constant set [0, 2, 8..20, 99..192] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 100;
|
|
|
+ s8 := 100;
|
|
|
+ u16 := 100;
|
|
|
+ s16 := 100;
|
|
|
+ u32 := 100;
|
|
|
+ s32 := 100;
|
|
|
+ u64 := 100;
|
|
|
+ s64 := 100;
|
|
|
+
|
|
|
+ WriteLn('100, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 98;
|
|
|
+ s8 := 98;
|
|
|
+ u16 := 98;
|
|
|
+ s16 := 98;
|
|
|
+ u32 := 98;
|
|
|
+ s32 := 98;
|
|
|
+ u64 := 98;
|
|
|
+ s64 := 98;
|
|
|
+
|
|
|
+ WriteLn('98, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 193;
|
|
|
+// s8 := 193;
|
|
|
+ u16 := 193;
|
|
|
+ s16 := 193;
|
|
|
+ u32 := 193;
|
|
|
+ s32 := 193;
|
|
|
+ u64 := 193;
|
|
|
+ s64 := 193;
|
|
|
+
|
|
|
+ WriteLn('193, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20, 99..192], False);
|
|
|
+// CheckResult(' s8 -> ', s8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in [0, 2, 8..20, 99..192], False);
|
|
|
+// CheckResult(' s8 -> ', s8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), s8 should be true, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all unsigned true, all signed false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s8 -> ', s8 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20, 99..192], True);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20, 99..192]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against set of byte with value [8..20, 68, 72..83, 99..192] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ LargeSet := [68, 72..83, 99..192];
|
|
|
+
|
|
|
+ u8 := 100;
|
|
|
+ s8 := 100;
|
|
|
+ u16 := 100;
|
|
|
+ s16 := 100;
|
|
|
+ u32 := 100;
|
|
|
+ s32 := 100;
|
|
|
+ u64 := 100;
|
|
|
+ s64 := 100;
|
|
|
+
|
|
|
+ WriteLn('100, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in LargeSet, True);
|
|
|
+ CheckResult(' s8 -> ', s8 in LargeSet, True);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, True);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, True);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, True);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, True);
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet, True);
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet, True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 98;
|
|
|
+ s8 := 98;
|
|
|
+ u16 := 98;
|
|
|
+ s16 := 98;
|
|
|
+ u32 := 98;
|
|
|
+ s32 := 98;
|
|
|
+ u64 := 98;
|
|
|
+ s64 := 98;
|
|
|
+
|
|
|
+ WriteLn('98, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in LargeSet, False);
|
|
|
+ CheckResult(' s8 -> ', s8 in LargeSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 193;
|
|
|
+// s8 := 193;
|
|
|
+ u16 := 193;
|
|
|
+ s16 := 193;
|
|
|
+ u32 := 193;
|
|
|
+ s32 := 193;
|
|
|
+ u64 := 193;
|
|
|
+ s64 := 193;
|
|
|
+
|
|
|
+ WriteLn('193, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in LargeSet, False);
|
|
|
+// CheckResult(' s8 -> ', s8 in LargeSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in LargeSet, False);
|
|
|
+// CheckResult(' s8 -> ', s8 in LargeSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), s8 should be true, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in LargeSet, False);
|
|
|
+ CheckResult(' s8 -> ', s8 in LargeSet, True);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in LargeSet, False);
|
|
|
+ CheckResult('s8 -> ', s8 in LargeSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in LargeSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in LargeSet, False);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in LargeSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against constant set [0, 2, 8..20, 99..192] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('100, should be true');
|
|
|
+ CheckResult('100 -> ', 100 in [0, 2, 8..20, 99..192], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('98, should be false');
|
|
|
+ CheckResult(' 98 -> ', 98 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('193, should be false');
|
|
|
+ CheckResult('193 -> ', 193 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in [0, 2, 8..20, 99..192], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), s8 should be true, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('u16 -> ', High(u16) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in [0, 2, 8..20, 99..192], False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in [0, 2, 8..20, 99..192]);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in [0, 2, 8..20, 99..192]);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('Low(type), all unsigned true, all signed false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult('u8 -> ', Low(u8) in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s8 -> ', Low(s8) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in [0, 2, 8..20, 99..192], True);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in [0, 2, 8..20, 99..192], False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in [0, 2, 8..20, 99..192], True);
|
|
|
+
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in [0, 2, 8..20, 99..192]);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against set of byte with value [0, 2, 8..20, 99..192] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ LargeSet := [68, 72..83, 99..192];
|
|
|
+
|
|
|
+ WriteLn('100, should be true');
|
|
|
+ CheckResult('100 -> ', 100 in LargeSet, True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('98, should be false');
|
|
|
+ CheckResult(' 98 -> ', 98 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('193, should be false');
|
|
|
+ CheckResult('193 -> ', 193 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in LargeSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), s8 should be true, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in LargeSet, False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in LargeSet, True);
|
|
|
+ CheckResult('u16 -> ', High(u16) in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in LargeSet, False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in LargeSet);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in LargeSet);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult(' u8 -> ', Low(u8) in LargeSet, False);
|
|
|
+ CheckResult(' s8 -> ', Low(s8) in LargeSet, False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in LargeSet, False);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in LargeSet, False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in LargeSet, False);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in LargeSet, False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in LargeSet, False);
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in LargeSet);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against constant set [0, 2, 8..20] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 10;
|
|
|
+ s8 := 10;
|
|
|
+ u16 := 10;
|
|
|
+ s16 := 10;
|
|
|
+ u32 := 10;
|
|
|
+ s32 := 10;
|
|
|
+ u64 := 10;
|
|
|
+ s64 := 10;
|
|
|
+
|
|
|
+ WriteLn('10, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20], True);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 7;
|
|
|
+ s8 := 7;
|
|
|
+ u16 := 7;
|
|
|
+ s16 := 7;
|
|
|
+ u32 := 7;
|
|
|
+ s32 := 7;
|
|
|
+ u64 := 7;
|
|
|
+ s64 := 7;
|
|
|
+
|
|
|
+ WriteLn('7, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 30;
|
|
|
+ s8 := 30;
|
|
|
+ u16 := 30;
|
|
|
+ s16 := 30;
|
|
|
+ u32 := 30;
|
|
|
+ s32 := 30;
|
|
|
+ u64 := 30;
|
|
|
+ s64 := 30;
|
|
|
+
|
|
|
+ WriteLn('30, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in [0, 2, 8..20], False);
|
|
|
+// CheckResult(' s8 -> ', s8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all unsigned true, all signed false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s8 -> ', s8 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [0, 2, 8..20], True);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [0, 2, 8..20]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against set of 0..31 with value [0, 2, 8..20] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ SmallSet := [10..16];
|
|
|
+
|
|
|
+ u8 := 10;
|
|
|
+ s8 := 10;
|
|
|
+ u16 := 10;
|
|
|
+ s16 := 10;
|
|
|
+ u32 := 10;
|
|
|
+ s32 := 10;
|
|
|
+ u64 := 10;
|
|
|
+ s64 := 10;
|
|
|
+
|
|
|
+ WriteLn('10, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in SmallSet, True);
|
|
|
+ CheckResult(' s8 -> ', s8 in SmallSet, True);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, True);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, True);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, True);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, True);
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet, True);
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet, True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 9;
|
|
|
+ s8 := 9;
|
|
|
+ u16 := 9;
|
|
|
+ s16 := 9;
|
|
|
+ u32 := 9;
|
|
|
+ s32 := 9;
|
|
|
+ u64 := 9;
|
|
|
+ s64 := 9;
|
|
|
+
|
|
|
+ WriteLn('9, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in SmallSet, False);
|
|
|
+ CheckResult(' s8 -> ', s8 in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 17;
|
|
|
+ s8 := 17;
|
|
|
+ u16 := 17;
|
|
|
+ s16 := 17;
|
|
|
+ u32 := 17;
|
|
|
+ s32 := 17;
|
|
|
+ u64 := 17;
|
|
|
+ s64 := 17;
|
|
|
+
|
|
|
+ WriteLn('17, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in SmallSet, False);
|
|
|
+ CheckResult(' s8 -> ', s8 in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in SmallSet, False);
|
|
|
+// CheckResult(' s8 -> ', s8 in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet, False);
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in SmallSet, False);
|
|
|
+ CheckResult(' s8 -> ', s8 in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in SmallSet, False);
|
|
|
+ CheckResult('s8 -> ', s8 in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', u16 in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', s16 in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', u32 in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', s32 in SmallSet, False);
|
|
|
+ CheckResult('u64 -> ', u64 in SmallSet, False);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in SmallSet);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against constant set [0, 2, 8..20] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('10, should be true');
|
|
|
+ CheckResult('10 -> ', 10 in [0, 2, 8..20], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('7, should be false');
|
|
|
+ CheckResult(' 7 -> ', 7 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('30, should be false');
|
|
|
+ CheckResult('30 -> ', 30 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in [0, 2, 8..20], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in [0, 2, 8..20], False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', High(u16) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in [0, 2, 8..20], False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in [0, 2, 8..20]);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in [0, 2, 8..20]);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('Low(type), all unsigned true, all signed false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult('u8 -> ', Low(u8) in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s8 -> ', Low(s8) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in [0, 2, 8..20], True);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in [0, 2, 8..20], False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in [0, 2, 8..20], True);
|
|
|
+
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in [0, 2, 8..20]);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against set of 0..31 with value [0, 2, 8..20] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ SmallSet := [9..17];
|
|
|
+
|
|
|
+ WriteLn('10, should be true');
|
|
|
+ CheckResult('10 -> ', 10 in SmallSet, True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('7, should be false');
|
|
|
+ CheckResult(' 7 -> ', 7 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('18, should be false');
|
|
|
+ CheckResult('18 -> ', 18 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in SmallSet, False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), all false, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in SmallSet, False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', High(u16) in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in SmallSet, False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in SmallSet);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in SmallSet);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult(' u8 -> ', Low(u8) in SmallSet, False);
|
|
|
+ CheckResult(' s8 -> ', Low(s8) in SmallSet, False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in SmallSet, False);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in SmallSet, False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in SmallSet, False);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in SmallSet, False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in SmallSet, False);
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in SmallSet);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against constant set [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 25;
|
|
|
+ s8 := 25;
|
|
|
+ u16 := 25;
|
|
|
+ s16 := 25;
|
|
|
+ u32 := 25;
|
|
|
+ s32 := 25;
|
|
|
+ u64 := 25;
|
|
|
+ s64 := 25;
|
|
|
+
|
|
|
+ WriteLn('25, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 26;
|
|
|
+ s8 := 26;
|
|
|
+ u16 := 26;
|
|
|
+ s16 := 26;
|
|
|
+ u32 := 26;
|
|
|
+ s32 := 26;
|
|
|
+ u64 := 26;
|
|
|
+ s64 := 26;
|
|
|
+
|
|
|
+ WriteLn('26, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 49;
|
|
|
+ s8 := 49;
|
|
|
+ u16 := 49;
|
|
|
+ s16 := 49;
|
|
|
+ u32 := 49;
|
|
|
+ s32 := 49;
|
|
|
+ u64 := 49;
|
|
|
+ s64 := 49;
|
|
|
+
|
|
|
+ WriteLn('49, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+// CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against constant set [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('25, should be true');
|
|
|
+ CheckResult('25 -> ', 25 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('26, should be false');
|
|
|
+ CheckResult(' 26 -> ', 26 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('49, should be false');
|
|
|
+ CheckResult('49 -> ', 49 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', High(u16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult('u8 -> ', Low(u8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s8 -> ', Low(s8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41], False);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- Variable against constant set [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 25;
|
|
|
+ s8 := 25;
|
|
|
+ u16 := 25;
|
|
|
+ s16 := 25;
|
|
|
+ u32 := 25;
|
|
|
+ s32 := 25;
|
|
|
+ u64 := 25;
|
|
|
+ s64 := 25;
|
|
|
+
|
|
|
+ WriteLn('25, should be true');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 26;
|
|
|
+ s8 := 26;
|
|
|
+ u16 := 26;
|
|
|
+ s16 := 26;
|
|
|
+ u32 := 26;
|
|
|
+ s32 := 26;
|
|
|
+ u64 := 26;
|
|
|
+ s64 := 26;
|
|
|
+
|
|
|
+ WriteLn('26, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := 30;
|
|
|
+ s8 := 30;
|
|
|
+ u16 := 30;
|
|
|
+ s16 := 30;
|
|
|
+ u32 := 30;
|
|
|
+ s32 := 30;
|
|
|
+ u64 := 30;
|
|
|
+ s64 := 30;
|
|
|
+
|
|
|
+ WriteLn('30, should be false');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+// u8 := 256;
|
|
|
+// s8 := 256;
|
|
|
+ u16 := 256;
|
|
|
+ s16 := 256;
|
|
|
+ u32 := 256;
|
|
|
+ s32 := 256;
|
|
|
+ u64 := 256;
|
|
|
+ s64 := 256;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+// CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+// CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := High(u8);
|
|
|
+ s8 := High(s8);
|
|
|
+ u16 := High(u16);
|
|
|
+ s16 := High(s16);
|
|
|
+ u32 := High(u32);
|
|
|
+ s32 := High(s32);
|
|
|
+ u64 := High(u64);
|
|
|
+ s64 := High(s64);
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check');
|
|
|
+ CheckResult(' u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult(' s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ try
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ u8 := Low(u8);
|
|
|
+ s8 := Low(s8);
|
|
|
+ u16 := Low(u16);
|
|
|
+ s16 := Low(s16);
|
|
|
+ u32 := Low(u32);
|
|
|
+ s32 := Low(s32);
|
|
|
+ u64 := Low(u64);
|
|
|
+ s64 := Low(s64);
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error');
|
|
|
+ CheckResult('u8 -> ', u8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s8 -> ', s8 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', u16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', s16 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', u32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', s32 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u64 -> ', u64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+
|
|
|
+ try
|
|
|
+ CheckResult('s64 -> ', s64 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29]);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('--- constant value against constant set [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29] ---' );
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('25, should be true');
|
|
|
+ CheckResult('25 -> ', 25 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], True);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('26, should be false');
|
|
|
+ CheckResult(' 26 -> ', 26 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('30, should be false');
|
|
|
+ CheckResult('30 -> ', 30 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('256, should be false');
|
|
|
+ CheckResult('256 -> ', 256 in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('High(type), should be false, u64/s64 should cause range check at compile time');
|
|
|
+ CheckResult(' u8 -> ', High(u8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult(' s8 -> ', High(s8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', High(u16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', High(s16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', High(u32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', High(s32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ try
|
|
|
+// CheckResult('u64 -> ', High(u64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn('u64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('u64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', High(s64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ WriteLn('Low(type), all false, except s64 -> range check error at compile time');
|
|
|
+ CheckResult('u8 -> ', Low(u8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s8 -> ', Low(s8) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u16 -> ', Low(u16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s16 -> ', Low(s16) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u32 -> ', Low(u32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('s32 -> ', Low(s32) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ CheckResult('u64 -> ', Low(u64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+
|
|
|
+ try
|
|
|
+// CheckResult('s64 -> ', Low(s64) in [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29], False);
|
|
|
+ WriteLn('s64 -> Error: range check error while evaluating constants');
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ WriteLn('s64 -> ', E.Classname,': ',E.Message);
|
|
|
+ end;
|
|
|
+ WriteLn;
|
|
|
+
|
|
|
+ if Error then begin
|
|
|
+ WriteLn('* * * ERROR * * * ERROR * * * ERROR * * * ERROR * * * ERROR * * * ERROR * * *');
|
|
|
+ Halt(1);
|
|
|
+ end else
|
|
|
+ Halt(0);
|
|
|
+end.
|