-
-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathDeterministicRandomBenchmarks.cs
More file actions
124 lines (103 loc) · 3.18 KB
/
Copy pathDeterministicRandomBenchmarks.cs
File metadata and controls
124 lines (103 loc) · 3.18 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using BenchmarkDotNet.Attributes;
using FixedMathSharp.Random;
namespace FixedMathSharp.Benchmarks;
[MemoryDiagnoser]
public class DeterministicRandomBenchmarks
{
private readonly byte[] _bytes = new byte[1024];
[Benchmark]
public ulong NextU64()
{
var rng = new DeterministicRandom(0xD15EA5EUL);
ulong accumulator = 0UL;
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator ^= rng.NextU64();
return accumulator;
}
[Benchmark]
public int Next()
{
var rng = new DeterministicRandom(0xD15EA5EUL);
int accumulator = 0;
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator ^= rng.Next();
return accumulator;
}
[Benchmark]
public int NextBoundedInt()
{
var rng = new DeterministicRandom(0xB0075EEDUL);
int accumulator = 0;
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator += rng.Next(97);
return accumulator;
}
[Benchmark]
public int NextIntRange()
{
var rng = new DeterministicRandom(0xB0075EEDUL);
int accumulator = 0;
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator += rng.Next(-128, 128);
return accumulator;
}
[Benchmark]
public Fixed64 NextFixed6401()
{
var rng = new DeterministicRandom(0xF164UL);
Fixed64 accumulator = Fixed64.Zero;
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator += rng.NextFixed6401();
return accumulator;
}
[Benchmark]
public Fixed64 NextFixed64Max()
{
var rng = new DeterministicRandom(0xF164UL);
Fixed64 accumulator = Fixed64.Zero;
Fixed64 max = new Fixed64(128);
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator += rng.NextFixed64(max);
return accumulator;
}
[Benchmark]
public Fixed64 NextFixed64Range()
{
var rng = new DeterministicRandom(0xF164UL);
Fixed64 accumulator = Fixed64.Zero;
Fixed64 min = new Fixed64(-64);
Fixed64 max = new Fixed64(64);
for (int i = 0; i < BenchmarkFixtures.SampleCount * 4; i++)
accumulator += rng.NextFixed64(min, max);
return accumulator;
}
[Benchmark]
public byte NextBytes()
{
var rng = new DeterministicRandom(0xB17E5UL);
rng.NextBytes(_bytes);
return _bytes[_bytes.Length - 1];
}
[Benchmark]
public ulong SeededStreams()
{
ulong accumulator = 0UL;
for (ulong i = 0; i < BenchmarkFixtures.SampleCount; i++)
{
var rng = new DeterministicRandom(0x51A7E000UL + i);
accumulator ^= rng.NextU64();
}
return accumulator;
}
[Benchmark]
public ulong FeatureDerivedStreams()
{
ulong accumulator = 0UL;
for (ulong i = 0; i < BenchmarkFixtures.SampleCount; i++)
{
var rng = DeterministicRandom.FromWorldFeature(0xDEADBEEFCAFEBABEUL, 0x4F5245UL, i);
accumulator ^= rng.NextU64();
}
return accumulator;
}
}