program app;
uses Multi_Int;
procedure test1;
var
i: Int32;
m: Multi_Int_X3;
begin
writeln('# Int32 (signed)');
// assign highest possible signed int
i := high(integer);
writeln('i = ', i:11);
// and overflow it
i += 1;
writeln('i +1 = ', i:11);
writeln;
writeln('# Multi_Int_X3 (?)');
// assign highest possible signed int
// m := high(integer);
// Please do this instead
m:= Multi_Int_X3_MAXINT;
writeln('m = ', m.ToStr:11);
// and overflow it
m += 1;
writeln('m +1 = ', m.ToStr:11);
writeln;
writeln('value correct? ', i = int64(m), ', i = ', i, ', m = ', int64(m));
writeln('bits the same? ', binstr(i, 64) = binstr(int64(m), 64));
writeln('i bits = ', binstr(i, 64));
writeln('m bits = ', binstr(int64(m), 64));
writeln('m bits = ', m.ToBin:64);
end;
procedure test2;
var
i: Int32;
begin
writeln('# Int32');
i := -123;
writeln('value = ', i);
writeln('bits = ', binstr(i, 33), ' value = ', Int64(i):11);
i := -123;
i := i xor (1 shl 31);
writeln('bits xored without ABS = ', binstr(i, 33), ' value = ', Int64(i):11);
i := -123;
i := abs(i);
i := i xor (1 shl 31);
writeln('bits xored with ABS = ', binstr(i, 33), ' value = ', Int64(i):11);
end;
procedure test3;
var
i: Multi_Int_X3;
begin
writeln('# Multi_Int_X3');
i := -123;
writeln('value = ', i.ToStr);
writeln('bits = ', i.ToBin:33, ' value = ', Int64(i):11); // using Int64 because of overflow
i := -123;
i := i xor (1 shl 31);
writeln('bits xored without ABS = ', i.ToBin:33, ' value = ', Int64(i):11);
i := -123;
i := abs(i);
i := i xor (1 shl 31);
writeln('bits xored with ABS = ', i.ToBin:33, ' value = ', Int64(i):11);
end;
procedure test4;
var
i: Multi_Int_X3;
begin
writeln('# Multi_Int_X3');
writeln('# cast to Int64 before converting to binary');
i := -123;
writeln('value = ', i.ToStr);
writeln('bits = ', binstr(int64(i), 33):33, ' value = ', Int64(i):11); // using Int64 because of overflow
i := -123;
i := i xor (1 shl 31);
writeln('bits xored without ABS = ', binstr(int64(i), 33):33, ' value = ', Int64(i):11);
i := -123;
i := abs(i);
i := i xor (1 shl 31);
writeln('bits xored with ABS = ', binstr(int64(i), 33):33, ' value = ', Int64(i):11);
end;
begin
writeln('****** test 1 ******');
test1;
writeln;
writeln;
writeln('****** test 2 ******');
test2;
writeln;
writeln;
writeln('****** test 3 ******');
test3;
writeln;
writeln;
writeln('****** test 4 ******');
test4;
writeln;
writeln;
readln;
end.