test(core): Swift oracle — the filius-ipad core built on Linux as the reference
tools/swift-oracle builds the unchanged Swift runtime (pinned 3b5ded0) in Docker and replays JSON scenarios; the TypeScript engine must produce the same trace events, results and end state. Five scenarios, 884 events, identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# 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.
|
||||
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user