Skip to content

Commit 87f85b2

Browse files
Fuzzing: Print engine name in differential test output
1 parent a979cae commit 87f85b2

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

FuzzTesting/Sources/FuzzDifferential/FuzzDifferential.swift

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ import SystemPackage
55
import Foundation
66

77
protocol Engine {
8+
var name: String { get }
89
func run(moduleBytes: [UInt8]) throws -> ExecResult
910
}
1011

12+
extension Engine {
13+
var name: String {
14+
return String(describing: type(of: self))
15+
}
16+
}
17+
1118
struct ExecResult {
1219
let values: [Value]?
1320
let trap: String?
@@ -17,30 +24,32 @@ struct ExecResult {
1724
return trap != nil
1825
}
1926

20-
static func check(_ lhs: ExecResult, _ rhs: ExecResult) -> Bool {
27+
static func check(_ lhs: (result: ExecResult, name: String), _ rhs: (result: ExecResult, name: String)) -> Bool {
28+
let (lhsName, rhsName) = (lhs.name, rhs.name)
29+
let (lhs, rhs) = (lhs.result, rhs.result)
2130
guard lhs.hasTrap == rhs.hasTrap else {
22-
print("Traps do not match: \(lhs.trap ?? "nil") vs \(rhs.trap ?? "nil")")
31+
print("Traps do not match: \(lhsName):\(lhs.trap ?? "nil") vs \(rhsName):\(rhs.trap ?? "nil")")
2332
return false
2433
}
2534
guard lhs.memory == rhs.memory else {
2635
guard lhs.memory?.count == rhs.memory?.count else {
27-
print("Memory sizes do not match: \(lhs.memory?.count ?? 0) vs \(rhs.memory?.count ?? 0)")
36+
print("Memory sizes do not match: \(lhsName):\(lhs.memory?.count ?? 0) vs \(rhsName):\(rhs.memory?.count ?? 0)")
2837
return false
2938
}
3039
for (i, (lhsByte, rhsByte)) in zip(lhs.memory ?? [], rhs.memory ?? []).enumerated() {
3140
if lhsByte != rhsByte {
32-
print("Memory byte \(i) does not match: \(lhsByte) vs \(rhsByte)")
41+
print("Memory byte \(i) does not match: \(lhsName):\(lhsByte) vs \(rhsName):\(rhsByte)")
3342
}
3443
}
3544
return false
3645
}
3746
guard lhs.values?.count == rhs.values?.count else {
38-
print("Value counts do not match: \(lhs.values?.count ?? 0) vs \(rhs.values?.count ?? 0)")
47+
print("Value counts do not match: \(lhsName):\(lhs.values?.count ?? 0) vs \(rhsName):\(rhs.values?.count ?? 0)")
3948
return false
4049
}
4150
for (i, (lhsValue, rhsValue)) in zip(lhs.values ?? [], rhs.values ?? []).enumerated() {
4251
if !Value.bitwiseEqual(lhsValue, rhsValue) {
43-
print("Value \(i) does not match: \(lhsValue) vs \(rhsValue)")
52+
print("Value \(i) does not match: \(lhsName):\(lhsValue) vs \(rhsName):\(rhsValue)")
4453
return false
4554
}
4655
}
@@ -90,6 +99,7 @@ extension wasm_name_t {
9099
}
91100

92101
struct WasmKitEngine: Engine {
102+
var name: String { return "wasmkit" }
93103
func run(moduleBytes: [UInt8]) throws -> ExecResult {
94104
let module = try WasmKit.parseWasm(bytes: moduleBytes)
95105
let engine = WasmKit.Engine()
@@ -127,6 +137,7 @@ struct WasmKitEngine: Engine {
127137
}
128138

129139
struct ReferenceEngine: Engine {
140+
var name: String { return "reference" }
130141
func run(moduleBytes: [UInt8]) throws -> ExecResult {
131142
return try moduleBytes.withUnsafeBytes { (module: UnsafeRawBufferPointer) -> ExecResult in
132143
try run(module: module)
@@ -275,7 +286,7 @@ struct ReferenceEngine: Engine {
275286
} else {
276287
moduleBytes = try Array(Data(contentsOf: URL(fileURLWithPath: moduleFile)))
277288
}
278-
let results = try engines.map { try $0.run(moduleBytes: moduleBytes) }
289+
let results = try engines.map { try ($0.run(moduleBytes: moduleBytes), $0.name) }
279290
guard results.count > 1 else {
280291
throw ExecError("Expected at least two engines")
281292
}

0 commit comments

Comments
 (0)