program tw37554; {$mode objfpc}{$H+} const CmpArray: array[0..88] of Int64 = ( -1, $FFFFFFFF, -3000000, -2147483648, -131073, $FFFFFFFFFFFF0000, $FFFFFFFF0000FFFF, $FFFF0000FFFFFFFF, $0000FFFFFFFFFFFF, $FFFFFFFFFFFFFFFE, $FFFFFFFFFFFFFFFD, $FFFFFFFFFFFFFFFB, $FFFFFFFFFFFFFFF7, $FFFFFFFFFFFFFFEF, $FFFFFFFFFFFFFFDF, $FFFFFFFFFFFFFFBF, $FFFFFFFFFFFFFF7F, $FFFFFFFFFFFFFEFF, $FFFFFFFFFFFFFDFF, $FFFFFFFFFFFFFBFF, $FFFFFFFFFFFFF7FF, $FFFFFFFFFFFFEFFF, $FFFFFFFFFFFFDFFF, $FFFFFFFFFFFFBFFF, $FFFFFFFFFFFF7FFF, $FFFFFFFFFFFEFFFF, $FFFFFFFFFFFDFFFF, $FFFFFFFFFFFBFFFF, $FFFFFFFFFFF7FFFF, $FFFFFFFFFFEFFFFF, $FFFFFFFFFFDFFFFF, $FFFFFFFFFFBFFFFF, $FFFFFFFFFF7FFFFF, $FFFFFFFFFEFFFFFF, $FFFFFFFFFDFFFFFF, $FFFFFFFFFBFFFFFF, $FFFFFFFFF7FFFFFF, $FFFFFFFFEFFFFFFF, $FFFFFFFFDFFFFFFF, $FFFFFFFFBFFFFFFF, $FFFFFFFF7FFFFFFF, $FFFFFFFEFFFFFFFF, $FFFFFFFDFFFFFFFF, $FFFFFFFBFFFFFFFF, $FFFFFFF7FFFFFFFF, $FFFFFFEFFFFFFFFF, $FFFFFFDFFFFFFFFF, $FFFFFFBFFFFFFFFF, $FFFFFF7FFFFFFFFF, $FFFFFEFFFFFFFFFF, $FFFFFDFFFFFFFFFF, $FFFFFBFFFFFFFFFF, $FFFFF7FFFFFFFFFF, $FFFFEFFFFFFFFFFF, $FFFFDFFFFFFFFFFF, $FFFFBFFFFFFFFFFF, $FFFF7FFFFFFFFFFF, $FFFEFFFFFFFFFFFF, $FFFDFFFFFFFFFFFF, $FFFBFFFFFFFFFFFF, $FFF7FFFFFFFFFFFF, $FFEFFFFFFFFFFFFF, $FFDFFFFFFFFFFFFF, $FFBFFFFFFFFFFFFF, $FF7FFFFFFFFFFFFF, $FEFFFFFFFFFFFFFF, $FDFFFFFFFFFFFFFF, $FBFFFFFFFFFFFFFF, $F7FFFFFFFFFFFFFF, $EFFFFFFFFFFFFFFF, $DFFFFFFFFFFFFFFF, $BFFFFFFFFFFFFFFF, $7FFFFFFFFFFFFFFF, $FFFFFFFFFFFF1234, $FFFFFFFF1234FFFF, $FFFF1234FFFFFFFF, $1234FFFFFFFFFFFF, $FFFFFFFF12341234, $FFFF1234FFFF1234, $FFFF12341234FFFF, $FFFF123412341234, $FFFFFFFFFFFF0001, $FFFFFFFF0001FFFF, $FFFF0001FFFFFFFF, $0001FFFFFFFFFFFF, $0000000100000001, $0000000500000005, $0000AAAA0000AAAA, $0000FFFF0000FFFF ); var Fail: Boolean; procedure CompareImmediate(CmpIndex: Integer; TestVal: Int64); begin Write('Test ', CmpIndex, '; input constant: ', TestVal, '; comparing against: ', CmpArray[CmpIndex], ' - '); if TestVal = CmpArray[CmpIndex] then begin WriteLn('Pass'); Exit; end; WriteLn('FAIL - expected ', CmpArray[CmpIndex]); Fail := True; end; begin Fail := False; CompareImmediate(0, -1); CompareImmediate(1, $FFFFFFFF); CompareImmediate(2, -3000000); CompareImmediate(3, -2147483648); CompareImmediate(4, -131073); CompareImmediate(5, $FFFFFFFFFFFF0000); CompareImmediate(6, $FFFFFFFF0000FFFF); CompareImmediate(7, $FFFF0000FFFFFFFF); CompareImmediate(8, $0000FFFFFFFFFFFF); CompareImmediate(9, $FFFFFFFFFFFFFFFE); CompareImmediate(10, $FFFFFFFFFFFFFFFD); CompareImmediate(11, $FFFFFFFFFFFFFFFB); CompareImmediate(12, $FFFFFFFFFFFFFFF7); CompareImmediate(13, $FFFFFFFFFFFFFFEF); CompareImmediate(14, $FFFFFFFFFFFFFFDF); CompareImmediate(15, $FFFFFFFFFFFFFFBF); CompareImmediate(16, $FFFFFFFFFFFFFF7F); CompareImmediate(17, $FFFFFFFFFFFFFEFF); CompareImmediate(18, $FFFFFFFFFFFFFDFF); CompareImmediate(19, $FFFFFFFFFFFFFBFF); CompareImmediate(20, $FFFFFFFFFFFFF7FF); CompareImmediate(21, $FFFFFFFFFFFFEFFF); CompareImmediate(22, $FFFFFFFFFFFFDFFF); CompareImmediate(23, $FFFFFFFFFFFFBFFF); CompareImmediate(24, $FFFFFFFFFFFF7FFF); CompareImmediate(25, $FFFFFFFFFFFEFFFF); CompareImmediate(26, $FFFFFFFFFFFDFFFF); CompareImmediate(27, $FFFFFFFFFFFBFFFF); CompareImmediate(28, $FFFFFFFFFFF7FFFF); CompareImmediate(29, $FFFFFFFFFFEFFFFF); CompareImmediate(30, $FFFFFFFFFFDFFFFF); CompareImmediate(31, $FFFFFFFFFFBFFFFF); CompareImmediate(32, $FFFFFFFFFF7FFFFF); CompareImmediate(33, $FFFFFFFFFEFFFFFF); CompareImmediate(34, $FFFFFFFFFDFFFFFF); CompareImmediate(35, $FFFFFFFFFBFFFFFF); CompareImmediate(36, $FFFFFFFFF7FFFFFF); CompareImmediate(37, $FFFFFFFFEFFFFFFF); CompareImmediate(38, $FFFFFFFFDFFFFFFF); CompareImmediate(39, $FFFFFFFFBFFFFFFF); CompareImmediate(40, $FFFFFFFF7FFFFFFF); CompareImmediate(41, $FFFFFFFEFFFFFFFF); CompareImmediate(42, $FFFFFFFDFFFFFFFF); CompareImmediate(43, $FFFFFFFBFFFFFFFF); CompareImmediate(44, $FFFFFFF7FFFFFFFF); CompareImmediate(45, $FFFFFFEFFFFFFFFF); CompareImmediate(46, $FFFFFFDFFFFFFFFF); CompareImmediate(47, $FFFFFFBFFFFFFFFF); CompareImmediate(48, $FFFFFF7FFFFFFFFF); CompareImmediate(49, $FFFFFEFFFFFFFFFF); CompareImmediate(50, $FFFFFDFFFFFFFFFF); CompareImmediate(51, $FFFFFBFFFFFFFFFF); CompareImmediate(52, $FFFFF7FFFFFFFFFF); CompareImmediate(53, $FFFFEFFFFFFFFFFF); CompareImmediate(54, $FFFFDFFFFFFFFFFF); CompareImmediate(55, $FFFFBFFFFFFFFFFF); CompareImmediate(56, $FFFF7FFFFFFFFFFF); CompareImmediate(57, $FFFEFFFFFFFFFFFF); CompareImmediate(58, $FFFDFFFFFFFFFFFF); CompareImmediate(59, $FFFBFFFFFFFFFFFF); CompareImmediate(60, $FFF7FFFFFFFFFFFF); CompareImmediate(61, $FFEFFFFFFFFFFFFF); CompareImmediate(62, $FFDFFFFFFFFFFFFF); CompareImmediate(63, $FFBFFFFFFFFFFFFF); CompareImmediate(64, $FF7FFFFFFFFFFFFF); CompareImmediate(65, $FEFFFFFFFFFFFFFF); CompareImmediate(66, $FDFFFFFFFFFFFFFF); CompareImmediate(67, $FBFFFFFFFFFFFFFF); CompareImmediate(68, $F7FFFFFFFFFFFFFF); CompareImmediate(69, $EFFFFFFFFFFFFFFF); CompareImmediate(70, $DFFFFFFFFFFFFFFF); CompareImmediate(71, $BFFFFFFFFFFFFFFF); CompareImmediate(72, $7FFFFFFFFFFFFFFF); CompareImmediate(73, $FFFFFFFFFFFF1234); CompareImmediate(74, $FFFFFFFF1234FFFF); CompareImmediate(75, $FFFF1234FFFFFFFF); CompareImmediate(76, $1234FFFFFFFFFFFF); CompareImmediate(77, $FFFFFFFF12341234); CompareImmediate(78, $FFFF1234FFFF1234); CompareImmediate(79, $FFFF12341234FFFF); CompareImmediate(80, $FFFF123412341234); CompareImmediate(81, $FFFFFFFFFFFF0001); CompareImmediate(82, $FFFFFFFF0001FFFF); CompareImmediate(83, $FFFF0001FFFFFFFF); CompareImmediate(84, $0001FFFFFFFFFFFF); CompareImmediate(85, $0000000100000001); CompareImmediate(86, $0000000500000005); CompareImmediate(87, $0000AAAA0000AAAA); CompareImmediate(88, $0000FFFF0000FFFF); { Spacing } WriteLn(''); if Fail then Halt(1) else WriteLn('ok'); end.