test(corpus): 23 .fls files and the Swift reader's view of them
The oracle gains a corpus mode; run.sh now stops on a failed build instead of running a stale binary. Swift reads all 23 files but drops Java gateways labelled 'Heimrouter' and nodes whose bounds are written through XMLEncoder back-references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -257,8 +257,50 @@ func run(_ scenario: Scenario) -> JSON {
|
||||
]
|
||||
}
|
||||
|
||||
// MARK: - .fls corpus
|
||||
|
||||
/// Imports every .fls under `root` and summarizes what the Swift reader made of it.
|
||||
func readCorpus(root: URL) throws -> JSON {
|
||||
var result: JSON = [:]
|
||||
let enumerator = FileManager.default.enumerator(at: root, includingPropertiesForKeys: nil)
|
||||
var files: [URL] = []
|
||||
while let item = enumerator?.nextObject() as? URL {
|
||||
if item.pathExtension == "fls" { files.append(item) }
|
||||
}
|
||||
for file in files.sorted(by: { $0.path < $1.path }) {
|
||||
let name = String(file.path.dropFirst(root.path.count + 1))
|
||||
do {
|
||||
let imported = try TopologyProjectStore.importFiliusArchive(Data(contentsOf: file))
|
||||
let state = imported.state
|
||||
var kinds: [String: Int] = [:]
|
||||
for node in state.graph.nodes { kinds[node.kind.rawValue, default: 0] += 1 }
|
||||
result[name] = [
|
||||
"version": imported.report.filiusVersion ?? NSNull(),
|
||||
"nodes": imported.report.importedNodeCount,
|
||||
"links": imported.report.importedLinkCount,
|
||||
"documentation": imported.report.importedDocumentationItemCount,
|
||||
"skipped": imported.report.skippedNodeCount,
|
||||
"warnings": imported.report.warnings,
|
||||
"residual": imported.opaqueContent.residualCount,
|
||||
"kinds": kinds,
|
||||
] as JSON
|
||||
} catch {
|
||||
result[name] = ["error": String(describing: error)] as JSON
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// MARK: - Main
|
||||
|
||||
if CommandLine.arguments.count == 4, CommandLine.arguments[1] == "--corpus" {
|
||||
let summary = try readCorpus(root: URL(fileURLWithPath: CommandLine.arguments[2]))
|
||||
let data = try JSONSerialization.data(withJSONObject: summary, options: [.prettyPrinted, .sortedKeys])
|
||||
try (data + Data("\n".utf8)).write(to: URL(fileURLWithPath: CommandLine.arguments[3]))
|
||||
print("corpus: \(summary.count) files")
|
||||
exit(0)
|
||||
}
|
||||
|
||||
let directory = URL(fileURLWithPath: CommandLine.arguments.dropFirst().first ?? ".")
|
||||
let files = try FileManager.default.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)
|
||||
.filter { $0.lastPathComponent.hasSuffix(".scenario.json") }
|
||||
|
||||
Reference in New Issue
Block a user