Skip to content

Commit bbc4a57

Browse files
committed
Add PowerShell test runner and update shell script to support CMake build structures
1 parent 2b5b8e0 commit bbc4a57

File tree

2 files changed

+220
-42
lines changed

2 files changed

+220
-42
lines changed

test-high/run-tests.ps1

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# PCG Random Number Generation for C++
2+
#
3+
# Copyright 2014-2017 Melissa O'Neill <[email protected]>,
4+
# and the PCG Project contributors.
5+
#
6+
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
7+
#
8+
# Licensed under the Apache License, Version 2.0 (provided in
9+
# LICENSE-APACHE.txt and at http://www.apache.org/licenses/LICENSE-2.0)
10+
# or under the MIT license (provided in LICENSE-MIT.txt and at
11+
# http://opensource.org/licenses/MIT), at your option. This file may not
12+
# be copied, modified, or distributed except according to those terms.
13+
14+
$ErrorActionPreference = "Stop"
15+
16+
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
17+
Set-Location $scriptDir
18+
19+
# Find the binaries
20+
$binDir = "."
21+
$testPaths = @(
22+
".",
23+
"../build/test-high/Debug",
24+
"../build/test-high/Release",
25+
"../build/test-high"
26+
)
27+
28+
foreach ($path in $testPaths) {
29+
if (Test-Path "$path/check-pcg32.exe") {
30+
$binDir = $path
31+
break
32+
}
33+
}
34+
35+
Write-Host "Performing a quick sanity check..."
36+
Write-Host "Testing using binaries from: $binDir"
37+
38+
if (!(Test-Path "actual")) {
39+
New-Item -ItemType Directory -Path "actual" | Out-Null
40+
} else {
41+
Remove-Item -Path "actual/*" -Force -ErrorAction SilentlyContinue
42+
}
43+
44+
function Run-Test($name, $outputFile = $null) {
45+
$exe = Join-Path $binDir "$name.exe"
46+
if (!(Test-Path $exe)) {
47+
$exe = Join-Path $binDir $name
48+
}
49+
50+
if (Test-Path $exe) {
51+
if ($outputFile) {
52+
& $exe | Out-File -FilePath "actual/$outputFile" -Encoding ascii
53+
} else {
54+
& $exe | Out-Null
55+
}
56+
} else {
57+
Write-Error "ERROR: $name not found in $binDir"
58+
}
59+
}
60+
61+
# Running tests
62+
Run-Test "check-pcg32" "check-pcg32.out"
63+
Run-Test "check-pcg32_oneseq" "check-pcg32_oneseq.out"
64+
Run-Test "check-pcg32" # dev/null equivalent
65+
Run-Test "check-pcg32_fast" "check-pcg32_fast.out"
66+
67+
Run-Test "check-pcg64" "check-pcg64.out"
68+
Run-Test "check-pcg64_oneseq" "check-pcg64_oneseq.out"
69+
Run-Test "check-pcg64_unique" # dev/null equivalent
70+
Run-Test "check-pcg64_fast" "check-pcg64_fast.out"
71+
72+
Run-Test "check-pcg8_once_insecure" "check-pcg8_once_insecure.out"
73+
Run-Test "check-pcg16_once_insecure" "check-pcg16_once_insecure.out"
74+
Run-Test "check-pcg32_once_insecure" "check-pcg32_once_insecure.out"
75+
Run-Test "check-pcg64_once_insecure" "check-pcg64_once_insecure.out"
76+
Run-Test "check-pcg128_once_insecure" "check-pcg128_once_insecure.out"
77+
78+
Run-Test "check-pcg8_oneseq_once_insecure" "check-pcg8_oneseq_once_insecure.out"
79+
Run-Test "check-pcg16_oneseq_once_insecure" "check-pcg16_oneseq_once_insecure.out"
80+
Run-Test "check-pcg32_oneseq_once_insecure" "check-pcg32_oneseq_once_insecure.out"
81+
Run-Test "check-pcg64_oneseq_once_insecure" "check-pcg64_oneseq_once_insecure.out"
82+
Run-Test "check-pcg128_oneseq_once_insecure" "check-pcg128_oneseq_once_insecure.out"
83+
84+
Run-Test "check-pcg32_k2" "check-pcg32_k2.out"
85+
Run-Test "check-pcg32_k2_fast" "check-pcg32_k2_fast.out"
86+
87+
Run-Test "check-pcg32_k64" "check-pcg32_k64.out"
88+
Run-Test "check-pcg32_k64_oneseq" "check-pcg32_k64_oneseq.out"
89+
Run-Test "check-pcg32_k64_fast" "check-pcg32_k64_fast.out"
90+
91+
Run-Test "check-pcg32_c64" "check-pcg32_c64.out"
92+
Run-Test "check-pcg32_c64_oneseq" "check-pcg32_c64_oneseq.out"
93+
Run-Test "check-pcg32_c64_fast" "check-pcg32_c64_fast.out"
94+
95+
Run-Test "check-pcg64_k32" "check-pcg64_k32.out"
96+
Run-Test "check-pcg64_k32_oneseq" "check-pcg64_k32_oneseq.out"
97+
Run-Test "check-pcg64_k32_fast" "check-pcg64_k32_fast.out"
98+
99+
Run-Test "check-pcg64_c32" "check-pcg64_c32.out"
100+
Run-Test "check-pcg64_c32_oneseq" "check-pcg64_c32_oneseq.out"
101+
Run-Test "check-pcg64_c32_fast" "check-pcg64_c32_fast.out"
102+
103+
Run-Test "check-pcg32_k1024" "check-pcg32_k1024.out"
104+
Run-Test "check-pcg32_k1024_fast" "check-pcg32_k1024_fast.out"
105+
106+
Run-Test "check-pcg32_c1024" "check-pcg32_c1024.out"
107+
Run-Test "check-pcg32_c1024_fast" "check-pcg32_c1024_fast.out"
108+
109+
Run-Test "check-pcg64_k1024" "check-pcg64_k1024.out"
110+
Run-Test "check-pcg64_k1024_fast" "check-pcg64_k1024_fast.out"
111+
112+
Run-Test "check-pcg64_c1024" "check-pcg64_c1024.out"
113+
Run-Test "check-pcg64_c1024_fast" "check-pcg64_c1024_fast.out"
114+
115+
Run-Test "check-pcg32_k16384" "check-pcg32_k16384.out"
116+
Run-Test "check-pcg32_k16384_fast" "check-pcg32_k16384_fast.out"
117+
118+
# Clean up empty/small files (similar to find -size -80c -delete)
119+
Get-ChildItem "actual" | Where-Object { $_.Length -lt 80 } | Remove-Item
120+
121+
# Compare with expected
122+
$diff = Compare-Object (Get-ChildItem "expected" -Exclude .gitignore) (Get-ChildItem "actual")
123+
if ($null -eq $diff) {
124+
# Perform actual content comparison
125+
$failed = $false
126+
Foreach ($file in Get-ChildItem "expected" -Exclude .gitignore) {
127+
$expectedFile = $file.FullName
128+
$actualFile = Join-Path "actual" $file.Name
129+
if (Test-Path $actualFile) {
130+
$diffContent = Compare-Object (Get-Content $expectedFile) (Get-Content $actualFile)
131+
if ($diffContent) {
132+
Write-Host "Difference in $($file.Name)" -ForegroundColor Red
133+
$failed = $true
134+
}
135+
}
136+
}
137+
138+
if (!$failed) {
139+
Write-Host "All tests succeeded." -ForegroundColor Green
140+
} else {
141+
Write-Host "ERROR: Some tests failed." -ForegroundColor Red
142+
exit 1
143+
}
144+
} else {
145+
Write-Host "ERROR: File list mismatch between expected and actual." -ForegroundColor Red
146+
exit 1
147+
}

test-high/run-tests.sh

Lines changed: 73 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -19,67 +19,98 @@
1919
# For additional information about the PCG random number generation scheme,
2020
# visit http://www.pcg-random.org/.
2121
#
22+
# Determine where the executables are
23+
# Priority: Current Dir -> ../build/test-high/Debug -> ../build/test-high/Release -> ../build/test-high
24+
BASEDIR=$(dirname "$0")
25+
cd "$BASEDIR"
26+
27+
BINDIR="."
28+
if [ ! -f "./check-pcg32" ] && [ ! -f "./check-pcg32.exe" ]; then
29+
if [ -f "../build/test-high/Debug/check-pcg32.exe" ]; then
30+
BINDIR="../build/test-high/Debug"
31+
elif [ -f "../build/test-high/Release/check-pcg32.exe" ]; then
32+
BINDIR="../build/test-high/Release"
33+
elif [ -f "../build/test-high/check-pcg32.exe" ]; then
34+
BINDIR="../build/test-high"
35+
elif [ -f "../build/test-high/check-pcg32" ]; then
36+
BINDIR="../build/test-high"
37+
fi
38+
fi
39+
40+
# Function to run a test, handling potential .exe extension
41+
run_test() {
42+
TEST_NAME=$1
43+
if [ -f "$BINDIR/$TEST_NAME.exe" ]; then
44+
"$BINDIR/$TEST_NAME.exe"
45+
elif [ -f "$BINDIR/$TEST_NAME" ]; then
46+
"$BINDIR/$TEST_NAME"
47+
else
48+
echo "ERROR: $TEST_NAME not found in $BINDIR" >&2
49+
return 1
50+
fi
51+
}
2252

2353
echo Performing a quick sanity check...
54+
echo "Testing using binaries from: $BINDIR"
2455

2556
mkdir -p actual
2657
rm -f actual/*
2758

28-
./check-pcg32 > actual/check-pcg32.out
29-
./check-pcg32_oneseq > actual/check-pcg32_oneseq.out
30-
./check-pcg32 > /dev/null
31-
./check-pcg32_fast > actual/check-pcg32_fast.out
59+
run_test check-pcg32 > actual/check-pcg32.out
60+
run_test check-pcg32_oneseq > actual/check-pcg32_oneseq.out
61+
run_test check-pcg32 > /dev/null
62+
run_test check-pcg32_fast > actual/check-pcg32_fast.out
3263

33-
./check-pcg64 > actual/check-pcg64.out
34-
./check-pcg64_oneseq > actual/check-pcg64_oneseq.out
35-
./check-pcg64_unique > /dev/null
36-
./check-pcg64_fast > actual/check-pcg64_fast.out
64+
run_test check-pcg64 > actual/check-pcg64.out
65+
run_test check-pcg64_oneseq > actual/check-pcg64_oneseq.out
66+
run_test check-pcg64_unique > /dev/null
67+
run_test check-pcg64_fast > actual/check-pcg64_fast.out
3768

38-
./check-pcg8_once_insecure > actual/check-pcg8_once_insecure.out
39-
./check-pcg16_once_insecure > actual/check-pcg16_once_insecure.out
40-
./check-pcg32_once_insecure > actual/check-pcg32_once_insecure.out
41-
./check-pcg64_once_insecure > actual/check-pcg64_once_insecure.out
42-
./check-pcg128_once_insecure > actual/check-pcg128_once_insecure.out
69+
run_test check-pcg8_once_insecure > actual/check-pcg8_once_insecure.out
70+
run_test check-pcg16_once_insecure > actual/check-pcg16_once_insecure.out
71+
run_test check-pcg32_once_insecure > actual/check-pcg32_once_insecure.out
72+
run_test check-pcg64_once_insecure > actual/check-pcg64_once_insecure.out
73+
run_test check-pcg128_once_insecure > actual/check-pcg128_once_insecure.out
4374

44-
./check-pcg8_oneseq_once_insecure > actual/check-pcg8_oneseq_once_insecure.out
45-
./check-pcg16_oneseq_once_insecure > actual/check-pcg16_oneseq_once_insecure.out
46-
./check-pcg32_oneseq_once_insecure > actual/check-pcg32_oneseq_once_insecure.out
47-
./check-pcg64_oneseq_once_insecure > actual/check-pcg64_oneseq_once_insecure.out
48-
./check-pcg128_oneseq_once_insecure > actual/check-pcg128_oneseq_once_insecure.out
75+
run_test check-pcg8_oneseq_once_insecure > actual/check-pcg8_oneseq_once_insecure.out
76+
run_test check-pcg16_oneseq_once_insecure > actual/check-pcg16_oneseq_once_insecure.out
77+
run_test check-pcg32_oneseq_once_insecure > actual/check-pcg32_oneseq_once_insecure.out
78+
run_test check-pcg64_oneseq_once_insecure > actual/check-pcg64_oneseq_once_insecure.out
79+
run_test check-pcg128_oneseq_once_insecure > actual/check-pcg128_oneseq_once_insecure.out
4980

50-
./check-pcg32_k2 > actual/check-pcg32_k2.out
51-
./check-pcg32_k2_fast > actual/check-pcg32_k2_fast.out
81+
run_test check-pcg32_k2 > actual/check-pcg32_k2.out
82+
run_test check-pcg32_k2_fast > actual/check-pcg32_k2_fast.out
5283

53-
./check-pcg32_k64 > actual/check-pcg32_k64.out
54-
./check-pcg32_k64_oneseq > actual/check-pcg32_k64_oneseq.out
55-
./check-pcg32_k64_fast > actual/check-pcg32_k64_fast.out
84+
run_test check-pcg32_k64 > actual/check-pcg32_k64.out
85+
run_test check-pcg32_k64_oneseq > actual/check-pcg32_k64_oneseq.out
86+
run_test check-pcg32_k64_fast > actual/check-pcg32_k64_fast.out
5687

57-
./check-pcg32_c64 > actual/check-pcg32_c64.out
58-
./check-pcg32_c64_oneseq > actual/check-pcg32_c64_oneseq.out
59-
./check-pcg32_c64_fast > actual/check-pcg32_c64_fast.out
88+
run_test check-pcg32_c64 > actual/check-pcg32_c64.out
89+
run_test check-pcg32_c64_oneseq > actual/check-pcg32_c64_oneseq.out
90+
run_test check-pcg32_c64_fast > actual/check-pcg32_c64_fast.out
6091

61-
./check-pcg64_k32 > actual/check-pcg64_k32.out
62-
./check-pcg64_k32_oneseq > actual/check-pcg64_k32_oneseq.out
63-
./check-pcg64_k32_fast > actual/check-pcg64_k32_fast.out
92+
run_test check-pcg64_k32 > actual/check-pcg64_k32.out
93+
run_test check-pcg64_k32_oneseq > actual/check-pcg64_k32_oneseq.out
94+
run_test check-pcg64_k32_fast > actual/check-pcg64_k32_fast.out
6495

65-
./check-pcg64_c32 > actual/check-pcg64_c32.out
66-
./check-pcg64_c32_oneseq > actual/check-pcg64_c32_oneseq.out
67-
./check-pcg64_c32_fast > actual/check-pcg64_c32_fast.out
96+
run_test check-pcg64_c32 > actual/check-pcg64_c32.out
97+
run_test check-pcg64_c32_oneseq > actual/check-pcg64_c32_oneseq.out
98+
run_test check-pcg64_c32_fast > actual/check-pcg64_c32_fast.out
6899

69-
./check-pcg32_k1024 > actual/check-pcg32_k1024.out
70-
./check-pcg32_k1024_fast > actual/check-pcg32_k1024_fast.out
100+
run_test check-pcg32_k1024 > actual/check-pcg32_k1024.out
101+
run_test check-pcg32_k1024_fast > actual/check-pcg32_k1024_fast.out
71102

72-
./check-pcg32_c1024 > actual/check-pcg32_c1024.out
73-
./check-pcg32_c1024_fast > actual/check-pcg32_c1024_fast.out
103+
run_test check-pcg32_c1024 > actual/check-pcg32_c1024.out
104+
run_test check-pcg32_c1024_fast > actual/check-pcg32_c1024_fast.out
74105

75-
./check-pcg64_k1024 > actual/check-pcg64_k1024.out
76-
./check-pcg64_k1024_fast > actual/check-pcg64_k1024_fast.out
106+
run_test check-pcg64_k1024 > actual/check-pcg64_k1024.out
107+
run_test check-pcg64_k1024_fast > actual/check-pcg64_k1024_fast.out
77108

78-
./check-pcg64_c1024 > actual/check-pcg64_c1024.out
79-
./check-pcg64_c1024_fast > actual/check-pcg64_c1024_fast.out
109+
run_test check-pcg64_c1024 > actual/check-pcg64_c1024.out
110+
run_test check-pcg64_c1024_fast > actual/check-pcg64_c1024_fast.out
80111

81-
./check-pcg32_k16384 > actual/check-pcg32_k16384.out
82-
./check-pcg32_k16384_fast > actual/check-pcg32_k16384_fast.out
112+
run_test check-pcg32_k16384 > actual/check-pcg32_k16384.out
113+
run_test check-pcg32_k16384_fast > actual/check-pcg32_k16384_fast.out
83114

84115
find actual -type f -size -80c -delete
85116

0 commit comments

Comments
 (0)