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 @@
sma
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
nan
107.082865308575
106.96031118542241
106.55098952518925
105.93612732359576
105.21531190077062
104.49759506253974
103.89175182739567
103.49656387805487
103.39199568793734
103.63205153291037
104.23995145016349
105.20605706144154
106.48873254066868
108.01806381828972
109.7021037968819
111.4350857115261
113.10687095991703
114.61278745568676
115.86297967414018
116.79043517866376
117.35697064210828
117.55664264968355
117.41627860650068
116.99308032537222
116.36951435923494
115.64594550958222
114.93167153765809
114.33515992096163
113.9543587765253
113.86794744733447
114.12830831094557
114.75684761770661
115.742083334167
117.04067079892921
118.58127457216008
120.2709406179764
122.00339961162967
123.66855966178939
125.16234049131411
126.39597061843133
127.30391704882051
127.84973914282192
128.0293437492481
127.87135083438908
127.43453694566097
126.80258487767678
126.07660853743191
125.36612074013492
124.7792507555816
124.41308544252024
124.34499676870873
124.62573040346784
125.27487275817427
126.27910139046546
127.59337505833837
129.14495712015346
130.83991288220435
132.57150050514548
134.2297059345968
135.71107012897224
136.92793074753726
137.81625276622648
138.34134853563094
138.50097632541122
138.3255405713923
137.87537593786334
137.23535780170852
1 sma
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 107.082865308575
16 106.96031118542241
17 106.55098952518925
18 105.93612732359576
19 105.21531190077062
20 104.49759506253974
21 103.89175182739567
22 103.49656387805487
23 103.39199568793734
24 103.63205153291037
25 104.23995145016349
26 105.20605706144154
27 106.48873254066868
28 108.01806381828972
29 109.7021037968819
30 111.4350857115261
31 113.10687095991703
32 114.61278745568676
33 115.86297967414018
34 116.79043517866376
35 117.35697064210828
36 117.55664264968355
37 117.41627860650068
38 116.99308032537222
39 116.36951435923494
40 115.64594550958222
41 114.93167153765809
42 114.33515992096163
43 113.9543587765253
44 113.86794744733447
45 114.12830831094557
46 114.75684761770661
47 115.742083334167
48 117.04067079892921
49 118.58127457216008
50 120.2709406179764
51 122.00339961162967
52 123.66855966178939
53 125.16234049131411
54 126.39597061843133
55 127.30391704882051
56 127.84973914282192
57 128.0293437492481
58 127.87135083438908
59 127.43453694566097
60 126.80258487767678
61 126.07660853743191
62 125.36612074013492
63 124.7792507555816
64 124.41308544252024
65 124.34499676870873
66 124.62573040346784
67 125.27487275817427
68 126.27910139046546
69 127.59337505833837
70 129.14495712015346
71 130.83991288220435
72 132.57150050514548
73 134.2297059345968
74 135.71107012897224
75 136.92793074753726
76 137.81625276622648
77 138.34134853563094
78 138.50097632541122
79 138.3255405713923
80 137.87537593786334
81 137.23535780170852