Files
XCEngine/tests/RHI/integration/compare_ppm.py
ssdfasd 238ebb50f4 test: Add RHI integration test framework
Add integration tests for RHI module:
- Add tests/RHI/integration/ directory with CMakeLists.txt
- Add RHIIntegrationFixture for shared test utilities
- Add minimal integration test (window creation, basic rendering)
- Add compare_ppm.py for image comparison
- Add run_integration_test.py test runner script

These integration tests verify the complete rendering pipeline
by comparing rendered output against ground truth PPM files.
2026-03-25 19:00:30 +08:00

75 lines
1.8 KiB
Python

import sys
import os
def read_ppm(filename):
with open(filename, "rb") as f:
header = f.readline()
if header != b"P6\n":
raise ValueError(f"Not a P6 PPM file: {filename}")
while True:
line = f.readline()
if not line.startswith(b"#"):
break
dims = line.split()
width, height = int(dims[0]), int(dims[1])
line = f.readline()
maxval = int(line.strip())
data = f.read()
return width, height, data
def compare_ppm(file1, file2, threshold):
w1, h1, d1 = read_ppm(file1)
w2, h2, d2 = read_ppm(file2)
if w1 != w2 or h1 != h2:
print(f"ERROR: Size mismatch - {file1}: {w1}x{h1}, {file2}: {w2}x{h2}")
return False
total_pixels = w1 * h1
diff_count = 0
for i in range(len(d1)):
diff = abs(d1[i] - d2[i])
if diff > threshold:
diff_count += 1
diff_percent = (diff_count / (total_pixels * 3)) * 100
print(f"Image 1: {file1} ({w1}x{h1})")
print(f"Image 2: {file2} ({w2}x{h2})")
print(f"Threshold: {threshold}")
print(f"Different pixels: {diff_count} / {total_pixels * 3} ({diff_percent:.2f}%)")
if diff_percent <= 1.0:
print("PASS: Images match!")
return True
else:
print("FAIL: Images differ!")
return False
if __name__ == "__main__":
if len(sys.argv) != 4:
print("Usage: python compare_ppm.py <file1.ppm> <file2.ppm> <threshold>")
sys.exit(1)
file1 = sys.argv[1]
file2 = sys.argv[2]
threshold = int(sys.argv[3])
if not os.path.exists(file1):
print(f"ERROR: File not found: {file1}")
sys.exit(1)
if not os.path.exists(file2):
print(f"ERROR: File not found: {file2}")
sys.exit(1)
result = compare_ppm(file1, file2, threshold)
sys.exit(0 if result else 1)