Files
mdg-filius/tools/swift-oracle

Swift-Orakel

Der Swift-Kern von filius-ipad (Laufzeit, Modell, .fls, Berichte — alles ohne Oberfläche) lässt sich unter Linux bauen. Dieses Werkzeug nutzt das als Maßstab für die Übertragung: Ein Szenario wird einmal als JSON beschrieben, in Swift abgespielt, und die TypeScript-Übertragung muss dieselbe Ausgabe liefern — jedes einzelne Spurereignis, jede Antwort, den Endzustand.

npm run oracle          # = tools/swift-oracle/run.sh (braucht Docker)
npm test                # vergleicht mit den geschriebenen *.swift.json
  • Szenarien: packages/core/test/scenarios/<name>.scenario.json
  • Ergebnis aus Swift: <name>.swift.json daneben — wird eingecheckt, damit die Tests ohne Docker und ohne Swift laufen.
  • Vergleich: packages/core/test/oracle.test.ts. Er meldet das erste abweichende Spurereignis mit Nummer.

Wie es gebaut wird

fetch-upstream.sh holt filius-ipad am festen Stand 3b5ded0 und kopiert die oberflächenfreien Quellen nach Sources/FiliusCore/ (nicht eingecheckt). Apple-Module, die es unter Linux nicht gibt, sind auf das Nötige verkleinert:

Modul Ersatz
CoreGraphics Foundation (hat CGPoint/CGFloat unter Linux)
CryptoKit swift-crypto (gleiche Schnittstelle)
Compression eine Funktion, compression_decode_buffer mit rohem DEFLATE über zlib
Network entfällt: TopologyRemoteLinkLANController.swift wird nicht mitgebaut

patches/linux-type-checker.patch teilt zwei lange Ausdrücke auf, an denen der Linux-Compiler die Typprüfung abbricht. Das Verhalten ändert sich dadurch nicht.

Neue Schrittarten

Eine Schrittart gibt es zweimal — in Sources/Oracle/main.swift und in packages/core/test/oracle.test.ts. Beide müssen dasselbe JSON schreiben.