diff options
Diffstat (limited to 'tests/bench/bdiv_u32.inc')
-rw-r--r-- | tests/bench/bdiv_u32.inc | 769 |
1 files changed, 769 insertions, 0 deletions
diff --git a/tests/bench/bdiv_u32.inc b/tests/bench/bdiv_u32.inc new file mode 100644 index 0000000000..44a1507e2a --- /dev/null +++ b/tests/bench/bdiv_u32.inc @@ -0,0 +1,769 @@ +type + { TUInt32Bit1Test } + + TUInt32Bit1Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit1ModTest } + + TUInt32Bit1ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit2Test } + + TUInt32Bit2Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit2ModTest } + + TUInt32Bit2ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit3Test } + + TUInt32Bit3Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit3ModTest } + + TUInt32Bit3ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit10Test } + + TUInt32Bit10Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit10ModTest } + + TUInt32Bit10ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit100Test } + + TUInt32Bit100Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit100ModTest } + + TUInt32Bit100ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit1000Test } +const + FU32_1000Input: array[$0..$F] of Cardinal = + (0, 1, 999, 1000, 1001, 1999, 2000, 2001, + 4294958999, 4294959000, 4294959001, + $7FFFFFFE, $7FFFFFFF, $80000000, $80000001, $FFFFFFFF); + +type + TUInt32Bit1000Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit1000ModTest } + + TUInt32Bit1000ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit60000Test } +const + FU32_60000Input: array[$0..$F] of Cardinal = + (0, 1, 59999, 60000, 60001, 119999, 120000, 120001, + 4294919999, 4294920000, 4294920001, + $7FFFFFFE, $7FFFFFFF, $80000000, $80000001, $FFFFFFFF); + +type + TUInt32Bit60000Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit60000ModTest } + + TUInt32Bit60000ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit146097Test } +const + FU32_146097Input: array[$0..$F] of Cardinal = + (0, 1, 146096, 146097, 146098, 292193, 292194, 292195, + 4294959605, 4294959606, 4294959607, + $7FFFFFFE, $7FFFFFFF, $80000000, $80000001, $FFFFFFFF); + +type + TUInt32Bit146097Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit146097ModTest } + + TUInt32Bit146097ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit3600000Test } +const + FU32_3600000Input: array[$0..$F] of Cardinal = + (0, 1, 3599999, 3600000, 3600001, 7199999, 7200000, 7200001, + 3600000000, 4294799999, 4294800000, 4294800001, + $7FFFFFFF, $80000000, $80000001, $FFFFFFFF); + +type + TUInt32Bit3600000Test = class(TUInt32DivTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + { TUInt32Bit3600000ModTest } + + TUInt32Bit3600000ModTest = class(TUInt32ModTest) + protected + function GetDivisor: Cardinal; override; + procedure DoTestIteration(Iteration: Integer); override; + public + function TestTitle: shortstring; override; + end; + + +{ TUInt32Bit1Test } + +function TUInt32Bit1Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 1'; + end; + +function TUInt32Bit1Test.GetDivisor: Cardinal; + begin + Result := 1; + end; + +procedure TUInt32Bit1Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967293; + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 1; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit1Test } + +function TUInt32Bit1ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 1'; + end; + +function TUInt32Bit1ModTest.GetDivisor: Cardinal; + begin + Result := 1; + end; + +procedure TUInt32Bit1ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967293; + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 1; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit2Test } + +function TUInt32Bit2Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 2'; + end; + +function TUInt32Bit2Test.GetDivisor: Cardinal; + begin + Result := 2; + end; + +procedure TUInt32Bit2Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967293; + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 2; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit2ModTest } + +function TUInt32Bit2ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 2'; + end; + +function TUInt32Bit2ModTest.GetDivisor: Cardinal; + begin + Result := 2; + end; + +procedure TUInt32Bit2ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967293; + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 2; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit3Test } + +function TUInt32Bit3Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 3'; + end; + +function TUInt32Bit3Test.GetDivisor: Cardinal; + begin + Result := 3; + end; + +procedure TUInt32Bit3Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 3; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit3ModTest } + +function TUInt32Bit3ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 3'; + end; + +function TUInt32Bit3ModTest.GetDivisor: Cardinal; + begin + Result := 3; + end; + +procedure TUInt32Bit3ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 254: + Numerator := 4294967294; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 3; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit10Test } + +function TUInt32Bit10Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 10'; + end; + +function TUInt32Bit10Test.GetDivisor: Cardinal; + begin + Result := 10; + end; + +procedure TUInt32Bit10Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967289; + 254: + Numerator := 4294967290; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 10; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit10ModTest } + +function TUInt32Bit10ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 10'; + end; + +function TUInt32Bit10ModTest.GetDivisor: Cardinal; + begin + Result := 10; + end; + +procedure TUInt32Bit10ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967289; + 254: + Numerator := 4294967290; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 10; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit100Test } + +function TUInt32Bit100Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 100'; + end; + +function TUInt32Bit100Test.GetDivisor: Cardinal; + begin + Result := 100; + end; + +procedure TUInt32Bit100Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967199; + 254: + Numerator := 4294967200; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 100; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit100ModTest } + +function TUInt32Bit100ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 100'; + end; + +function TUInt32Bit100ModTest.GetDivisor: Cardinal; + begin + Result := 100; + end; + +procedure TUInt32Bit100ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + case Index of + 253: + Numerator := 4294967199; + 254: + Numerator := 4294967200; + 255: + Numerator := 4294967295; + else + Numerator := Cardinal(Index); + end; + + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 100; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit1000Test } + +function TUInt32Bit1000Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 1,000'; + end; + +function TUInt32Bit1000Test.GetDivisor: Cardinal; + begin + Result := 1000; + end; + +procedure TUInt32Bit1000Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_1000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 1000; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit1000ModTest } + +function TUInt32Bit1000ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 1,000'; + end; + +function TUInt32Bit1000ModTest.GetDivisor: Cardinal; + begin + Result := 1000; + end; + +procedure TUInt32Bit1000ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_1000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 1000; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit60000Test } + +function TUInt32Bit60000Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 60,000'; + end; + +function TUInt32Bit60000Test.GetDivisor: Cardinal; + begin + Result := 60000; + end; + +procedure TUInt32Bit60000Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_60000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 60000; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit60000ModTest } + +function TUInt32Bit60000ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 60,000'; + end; + +function TUInt32Bit60000ModTest.GetDivisor: Cardinal; + begin + Result := 60000; + end; + +procedure TUInt32Bit60000ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_60000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 60000; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit146097Test } + +function TUInt32Bit146097Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 146,097'; + end; + +function TUInt32Bit146097Test.GetDivisor: Cardinal; + begin + Result := 146097; + end; + +procedure TUInt32Bit146097Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_146097Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 146097; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit146097ModTest } + +function TUInt32Bit146097ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 146,097'; + end; + +function TUInt32Bit146097ModTest.GetDivisor: Cardinal; + begin + Result := 146097; + end; + +procedure TUInt32Bit146097ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_146097Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 146097; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit3600000Test } + +function TUInt32Bit3600000Test.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit division by 3,600,000'; + end; + +function TUInt32Bit3600000Test.GetDivisor: Cardinal; + begin + Result := 3600000; + end; + +procedure TUInt32Bit3600000Test.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_3600000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator div 3600000; + + FResultArray[Index] := Answer; + end; + +{ TUInt32Bit3600000ModTest } + +function TUInt32Bit3600000ModTest.TestTitle: shortstring; + begin + Result := 'Unsigned 32-bit modulus by 3,600,000'; + end; + +function TUInt32Bit3600000ModTest.GetDivisor: Cardinal; + begin + Result := 3600000; + end; + +procedure TUInt32Bit3600000ModTest.DoTestIteration(Iteration: Integer); + var + Numerator, Answer: Cardinal; + Index, X: Integer; + begin + Index := Iteration and $FF; + Numerator := FU32_3600000Input[Index and $F]; + FInputArray[Index] := Numerator; + for X := 0 to INTERNAL_LOOPS - 1 do + Answer := Numerator mod 3600000; + + FResultArray[Index] := Answer; + end; |