File: testcastlerandom.pas

package info (click to toggle)
castle-game-engine 6.4%2Bdfsg1-7
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 195,044 kB
  • sloc: pascal: 364,622; ansic: 8,606; java: 2,851; objc: 2,601; cpp: 1,412; xml: 851; makefile: 723; sh: 563; php: 26
file content (78 lines) | stat: -rw-r--r-- 2,116 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
  Copyright 2012-2017 Michalis Kamburelis.

  This file is part of "Castle Game Engine".

  "Castle Game Engine" is free software; see the file COPYING.txt,
  included in this distribution, for details about the copyright.

  "Castle Game Engine" is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  ----------------------------------------------------------------------------
}

{ Test CastleRandom unit. }
unit TestCastleRandom;

interface

uses
  Classes, SysUtils, fpcunit, testutils, testregistry, CastleBaseTestCase;

type
  TTestCastleRandom = class(TCastleBaseTestCase)
  published
    procedure TestHash;
    procedure TestRandom;
  end;

implementation

uses CastleRandom;

procedure TTestCastleRandom.TestHash;
begin
  // Zero string hash
  AssertEquals(%00000000000000000000000000000000, StringToHash(''));
  // Short string hash
  AssertEquals(%01001001001101000010111110101111, StringToHash('1'));
  // Zero seed hash
  AssertEquals(%11100000010001101011001110011100, StringToHash('String to hash test'));
  // Seeded hash
  AssertEquals(%01111101100111100000101011011100, StringToHash('String to hash test',$9747b28c));
end;

procedure TTestCastleRandom.TestRandom;
const
  NTests = 10000000;
var
  Rnd: TCastleRandom;
  i: Integer;
  Sum: Double;
begin
  Rnd := TCastleRandom.Create;

  //test that random is in 0..1 limits
  for i := 0 to NTests do
    AssertTrue('Rnd.Random <= 1', Rnd.Random <= 1);
  for i := 0 to NTests do
    AssertTrue('Rnd.Random > 0', Rnd.Random > 0);

  //test random homogeneity
  {p.s. I'm not exactly sure if this is the right way to do, because random
   is random, and therefore there's always a tiny chance that it'll fail the test}
  Sum := 0;
  for i := 0 to NTests*10 do
    Sum += Rnd.Random;
  //checking random against shot noise (with extended margin, just in case)
  AssertTrue('Random is on average 0.5', Abs(Sum/(NTests*10)-0.5) <= 2/Sqrt(NTests*10));

  FreeAndNil(Rnd);
end;


initialization
  RegisterTest(TTestCastleRandom);
end.