test(golden): language-neutral fixtures + per-binding parity runners (#255)

**Task 5 — golden-fixture parity for the C-ABI bindings.** Lifts the C#/Go/Java/R tests from *one indicator per archetype* toward reference-value parity, catching FFI wiring bugs (swapped params, wrong multi-output field) the math-only core tests cannot see.

## What's here
- **`examples/rust/src/bin/gen_golden.rs`** + **`testdata/golden/*.csv`** — a Rust generator computing a deterministic OHLCV series plus the core's reference outputs for a curated archetype-spanning set: scalar (`Sma`/`Ema`/`Rsi`), candle (`Atr`), scalar multi-output (`MACD`), candle multi-output (`ADX`), pairwise (`Beta`). `nan` marks warmup. Regenerate with `cargo run -p wickra-examples --bin gen_golden`.
- **Parity runners** replaying the identical fixtures through each FFI (rel-tol 1e-6), each a standard test in the binding's existing suite (no `ci.yml` change — rides `dotnet test` / `go test` / `mvn install` / `R CMD`+testthat). A walk-up search locates `testdata/golden` regardless of run dir.
  - **C#** (`bindings/csharp/.../GoldenTests.cs`) —  validated locally, 7/7 pass.
  - **Go** (`bindings/go/golden_test.go`) —  validated locally, pass.
  - **Java** (`bindings/java/.../GoldenTests.java`) — modeled on the archetype API; validated by CI (no local mvn).
  - **R** (`bindings/r/tests/testthat/test-golden.R`) — modeled on the archetype API; validated by CI (no local Rscript).

## Notes
- The curated set spans every marshalling archetype; extending the indicator list is mechanical (add to the generator + regenerate). Bars/profile archetypes can be added next.
- No new CI jobs.
This commit is contained in:
kingchenc
2026-06-11 15:22:29 +02:00
committed by GitHub
parent 395a2289f4
commit 8bfe24ac1d
13 changed files with 1397 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
beta
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
0.9195261318785413
0.922546057952995
0.9270670303012646
0.9360823119678988
0.9520494101604974
0.9734365033467753
0.995093627699459
1.0111583960294632
1.018359059410051
1.0174553154888744
1.0121204526718954
1.0067713468887387
1.0049777031298115
1.0087588074727343
1.0182494903866188
1.031286972171161
1.0431058848104742
1.0473159800278413
1.0395185963505182
1.0218520432290943
1.0027356441997792
0.989852175809267
0.9830850966851594
0.9757086459066595
0.9639743320260056
0.9518863451049362
0.945167696468917
0.9459710447944064
0.9530453598334451
0.9634788824656162
0.973948405670025
0.9815754255825168
0.9846435781849213
0.9830670028068416
0.9783981708129912
0.9733920844663336
0.9713725848572005
0.9755741087472364
0.988273819307749
1.0091885908656193
1.0332355593672604
1.0510340548483572
1.057262107302167
1.058580145340488
1.0645933328050556
1.0735088672694193
1.0743308164692502
1.0612002349944065
1.0392533178013483
1.0174419588972756
1.0016230577141623
0.9934855658174216
0.9919410932606791
0.9943630990130676
0.9973488461009995
0.9974248103764315
0.9919840212101835
0.9802751136245323
0.9638604974880948
0.9461133999713321
0.9309659374652403
1 beta
2 nan
3 nan
4 nan
5 nan
6 nan
7 nan
8 nan
9 nan
10 nan
11 nan
12 nan
13 nan
14 nan
15 nan
16 nan
17 nan
18 nan
19 nan
20 nan
21 0.9195261318785413
22 0.922546057952995
23 0.9270670303012646
24 0.9360823119678988
25 0.9520494101604974
26 0.9734365033467753
27 0.995093627699459
28 1.0111583960294632
29 1.018359059410051
30 1.0174553154888744
31 1.0121204526718954
32 1.0067713468887387
33 1.0049777031298115
34 1.0087588074727343
35 1.0182494903866188
36 1.031286972171161
37 1.0431058848104742
38 1.0473159800278413
39 1.0395185963505182
40 1.0218520432290943
41 1.0027356441997792
42 0.989852175809267
43 0.9830850966851594
44 0.9757086459066595
45 0.9639743320260056
46 0.9518863451049362
47 0.945167696468917
48 0.9459710447944064
49 0.9530453598334451
50 0.9634788824656162
51 0.973948405670025
52 0.9815754255825168
53 0.9846435781849213
54 0.9830670028068416
55 0.9783981708129912
56 0.9733920844663336
57 0.9713725848572005
58 0.9755741087472364
59 0.988273819307749
60 1.0091885908656193
61 1.0332355593672604
62 1.0510340548483572
63 1.057262107302167
64 1.058580145340488
65 1.0645933328050556
66 1.0735088672694193
67 1.0743308164692502
68 1.0612002349944065
69 1.0392533178013483
70 1.0174419588972756
71 1.0016230577141623
72 0.9934855658174216
73 0.9919410932606791
74 0.9943630990130676
75 0.9973488461009995
76 0.9974248103764315
77 0.9919840212101835
78 0.9802751136245323
79 0.9638604974880948
80 0.9461133999713321
81 0.9309659374652403