Files
wickra/testdata/golden/g_VwapStdDevBands.csv
kingchenc 4f708d410d test: golden-pin the four de-duplicated indicators across all bindings (#305)
* test: golden-pin the four de-duplicated indicators across all C-ABI bindings

Extend gen_golden to emit reference fixtures for AdOscillator (ADOSC),
IntradayIntensity, AwesomeOscillatorHistogram and AverageDrawdown, and replay
them through the Go / C# / Java / R golden harnesses so their corrected
definitions stay bit-identical to the Rust core in every binding. Go suite
verified locally (gcc 13 + cgo): all 9 golden tests pass; C#/Java/R use the
same fixtures and harness pattern (CI-verified). First step of extending the
golden coverage beyond the seven archetype representatives.

* test: golden-pin the scalar-output tranche (308 indicators) against Rust

Extend gen_golden with a generated emit_scalar that writes reference fixtures
for every single-f64-output indicator (scalar / candle / pairwise input) using
valid constructor params, and add a manifest-driven generic Python golden
replay that reconstructs each by its native name and checks it bit-for-bit
against the Rust output. 308 indicators now value-tied to the Rust core in
Python (pytest: 308/308). Takes golden coverage from the 7 archetype
representatives to 308+ of the catalogue.

22 scalar indicators with non-default constructor constraints are skipped by
gen_golden for now (logged), as are non-f64-output ones; multi-output, exotic
inputs and the per-indicator arg arities of the C-ABI/Node replays follow.
Generated + verified locally with the full toolchain.

* test: golden-pin the multi-output tranche (70 indicators) in Python

Add a generated emit_multi to gen_golden (per-indicator Output-field access,
one CSV column per field) and a manifest-driven generic Python replay that
checks every field of each multi-output indicator against the Rust reference.
70 multi-output indicators now value-tied to Rust in Python; combined with the
scalar tranche, 378 indicators are golden-pinned. 8 multi with non-default
param constraints and 5 with non-f64 Output fields (Option/Vec/i64) are
deferred. pytest green.

* test(golden): add 30 constraint-tuned indicators to scalar/multi golden suite

Emit golden fixtures for 22 scalar-output and 8 multi-output indicators
whose constructors need non-default parameters (Alma, Jma, Psar, T3, Mama,
DoubleBollinger, ZigZag, ...). All 408 fixtures replay bit-for-bit through
the Python binding.

* test(golden): cover 36 missed scalar/multi indicators

Add 26 single-output (LinearRegression family, HT cycle, Candle
volatility estimators, DrawdownDuration) and 10 multi-output
(BollingerBands, MACD/MACDEXT/MACDFIX, Camarilla, VWAP bands, ...)
indicators to the golden suite. 444 fixtures replay bit-for-bit
through the Python binding.

* test(golden): cover 50 exotic-input indicators

Add deterministic synthetic feeders for the DerivativesTick (17),
CrossSection (15), Trade (8), TradeQuote (3) and OrderBook (7)
families, derived from the shared OHLCV input series in both
gen_golden and a new Python replay harness (test_golden_exotic).
All 494 fixtures replay bit-for-bit through the Python binding.

* test(golden): complete 514-indicator golden coverage

Add the final tranches: 3 mixed multi-output indicators (Ichimoku,
WilliamsFractals, LeadLagCrossCorrelation), 6 histogram profiles
(time/volume seasonality + TPO/volume price profiles), 10 alt-chart
bar builders and the footprint. Every one of the 514 distinct
indicators now has a Rust-generated g_<Canonical>.csv fixture and a
generic Python replay (scalar/multi/exotic/profile/bars), all passing
bit-for-bit.

* test(golden): add generic Node replay for all 514 indicators

A manifest-driven node:test harness reconstructs every indicator by its
native class, feeds the same synthetic stream derived from the shared
golden input, and checks output bit-for-bit against the Rust reference
fixtures (scalar/multi/exotic/profile/bars). node_manifest.json is
generated from index.d.ts plus the Python-side manifests. 514/514 pass.

* test(golden): add generated Go replay for all 514 indicators

golden_all_test.go (generated by gen_golden_test.py) reconstructs every
Go indicator, feeds the shared synthetic stream and checks output
bit-for-bit against the Rust reference fixtures. A reflection-based
comparator flattens multi-output structs, profiles and bar slices so one
path covers all archetypes. This is the first C-ABI binding verified
across the full catalogue. 514/514 pass.

* test(golden): add generated C# replay for all 514 indicators

GoldenAllTests.g.cs (generated by gen_golden_test.py) reconstructs every
C# indicator, feeds the shared synthetic stream and checks output
bit-for-bit against the Rust reference fixtures via a reflection-based
flatten covering scalar/multi/profile/bar archetypes. 514/514 pass.

Also add the '#nullable enable' directive the compiler requires to the
generated Indicators.g.cs, clearing the four CS8669 warnings on the
nullable double[] profile return types.

* fix(java): marshal C ABI bool params correctly; add 514 golden replay

The Java FFM binding marshalled the cross-section state flags (newHigh,
newLow, aboveMa, onBuySignal) as JAVA_DOUBLE arrays, but the C ABI takes
them as const bool* (one byte each), so the native side read the low byte
of each 8-byte double and saw every flag as false. Add WickraNative.
boolSegment and use it across the 15 cross-section indicators. Also pass
the MacdExt MaType arguments as byte to match the uint8_t downcall
descriptor (was int, throwing WrongMethodTypeException).

Add GoldenAllTest.java (generated by gen_golden_test.py): a reflection
runner replaying all 514 indicators against the Rust reference fixtures.
The bugs above were found by this test; 514/514 now pass.

* fix(r): marshal C ABI bool flags correctly; add 514 golden replay

The R wrapper passed the cross-section state flags as (bool *)REAL(x),
reinterpreting the 8-byte doubles as 1-byte bools so the native side read
every flag as false. Add wk_bool_vec to convert each flag vector into a
real C bool buffer and use it for all 15 cross-section update wrappers.

Add test-golden-all.R + generated golden_specs.R: a reflective runner
replaying all 514 indicators against the Rust reference fixtures. The bug
above was found by this test; verified 514/514 pass locally.

* test(golden): add WASM replay for all 514 indicators

A manifest-driven node:test harness loads the nodejs-target wasm-pack
build, reconstructs every indicator by its JS class, feeds the shared
synthetic stream and checks output bit-for-bit against the Rust
reference fixtures. wasm_manifest.json is generated from the wasm .d.ts
plus the shared manifests; a recursive flattener covers scalar, multi
(Reflect objects), profile and bar shapes. 514/514 pass locally
(wasm-pack build --target nodejs, then node --test).

* test(golden): add C and C++ replay for all 514 indicators

golden_test.c (generated by gen_golden_test.py) drives every indicator
through the C ABI (wickra.h) and checks output bit-for-bit against the
Rust reference fixtures. golden_test.cpp #includes the same source so the
identical runner is compiled and run under both gcc (C) and g++ (C++) via
the CMake targets golden_test / golden_test_cpp — proving the extern "C"
header is consumable from each language. Both 514/514 (verified via ctest).

* test(golden): gofmt the generated Go golden replay

* test(golden): make the Node fixture reader CRLF-safe and pin fixtures to LF
2026-06-15 04:48:51 +02:00

5.8 KiB

1uppermiddlelowerstddev
299.6666666666666799.6666666666666799.666666666666670
3104.92770232875756101.4318635593473697.936024789937161.7479193847050967
4108.69244982933654103.141846734644497.591243639952272.7753015473460683
5111.93189932087317104.7252425143504197.518585707827653.6033284032613793
6114.53906435593598106.1165881460107197.694111936085454.21123810496263
7116.41520043515631107.2619780714802698.10875570780424.5766111818380235
8117.52564075193412108.1239245477857898.722208343637434.7008581020741715
9117.92333610215195108.6847328660344599.446129629916954.619301618058748
10117.7606807047838108.94788218474959100.135083664715384.406399260017102
11117.28431319186235108.93719496319889100.590076734535434.17355911433173
12116.78832468727425108.6939142335673100.599503779860344.04720522685348
13116.50241704987188108.27212140087826100.041825751884644.115147824496811
14116.47968589146114107.7331565520371298.986627212613094.373264669712011
15116.61270359672542107.1398069773200597.666910357914674.736448309702689
16116.74883579075927106.5509951168433896.353154442927495.098920336957942
17116.7755008556913106.0175419195343295.259582983377345.378979468078491
18116.64416907064926105.57448871937794.504808368104755.534840175636129
19116.36170781621121105.2440304671816794.126353118152145.558838674514767
20115.99977207847752105.053226028965294.106679979452885.473273024756159
21115.68962498757833105.0166897380868594.343754488595385.3364676247457385
22115.60136018812608105.1362548005357494.67114941294545.232552693795174
23115.89796439968907105.4017819413266794.905599482964285.248091229181201
24116.66684724726818105.7929182401802794.918989233092365.436964503543958
25117.87174831705467106.28153478326194.691321249467325.795106766896837
26119.37005490301797106.8345512390494394.299047575080896.267751831984268
27120.97540508158576107.4168773158702493.858349550154716.779263882857761
28122.5133395512596107.9942442012752893.475148851290957.259547674992161
29123.85005787017792108.5357445486160893.221431227054247.657156660780923
30124.90191302624947109.0159372659383593.129961505627227.942987880155563
31125.63536429903525109.4164036838932893.197443068751318.109480307570985
32126.0616675636371109.7266722400703993.391676916503678.167497661783358
33126.2271921251002109.9444683107680693.661744496435928.14136190716607
34126.19889917929945110.0782945161421793.957689852984888.06030233157864
35126.0412823154776110.1378154177112194.234348519944827.951733448883194
36125.81343590191375110.1365467696651994.459657637416637.838444566124284
37125.558861473763110.0944679481034494.630074422443887.7321967628297825
38125.3020667117573110.0360410797229394.770015447688567.633012816017189
39125.0571065920818109.9875367480529294.917966904024047.534784922014441
40124.84365683556264109.9740229889891595.104389142415667.434816923286749
41124.70178127081248110.0164632612695695.331145251726657.3426590047714555
42124.69641213938546110.1293676885132195.562323237640977.283522225436122
43124.90575483614657110.319348065434695.732941294722627.293203385355985
44125.39453074355737110.5847626389498395.774994534342287.404884052303775
45126.18348301062304110.9164406015219195.649398192420797.63352120455056
46127.23354419335064111.2992937532778195.365043313204987.967125220036418
47128.455091588283111.7144928373953794.973894086507748.370299375443816
48129.7348038323493112.1418316612991294.548859490248968.79648608552508
49130.96398317883165112.5619260471369294.15986891544229.201028565847361
50132.09477571231508112.9717597589973193.848743805679539.561507976658891
51133.06323373058777113.3570168011121893.65079987163669.853108464737796
52133.82942039783396113.7041829156936193.5789454335532610.062618741070176
53134.38352146473898114.003820591257893.6241197177766510.18985043674058
54134.74082675986074114.2512818784795393.7617369970983110.24477244069061
55134.93379842260288114.4469225439971693.9600466653914510.243437939302854
56135.00316845719337114.5958275371378694.1884866170823610.203670460027753
57134.99008842670028114.707110170164794.4241319136291110.14148912826779
58134.93110315501633114.7928820368590394.6546609187017210.06911055907865
59134.85691559183536114.8670083288670294.877101065898679.994953631484172
60134.79463700029171114.9437687204671395.092900440642559.925434139912287
61134.77190241713149115.0365425107815395.301182604431579.867679953174976
62134.8203954251308115.1566306851734595.49286594521619.831882369978679
63134.9763078430269115.312315964515995.64832408600499.831995939255497
64135.27619921325294115.5082417785261795.74028434379949.883978717363386
65135.75170333853148115.7467352901243995.741767241717310.002484024203548
66136.4371061280408116.0344201588995195.6317341897582210.201342984570644
67137.3286863495318116.3670235505416795.4053607515515410.480831399495068
68138.38920728865028116.7359546586178395.0827020285853710.826626315016224
69139.5521895388458117.1289542606577994.7057189824697911.211617639094003
70140.73468751689697117.5312717963077894.327856075718611.60170786029459
71141.85373372480754117.9272424666530794.0007512084985811.96324562907724
72142.84120096441214118.3020475875189493.7628942106257512.269576688446602
73143.65355833782405118.6433922463971693.6332261549702712.505083045713441
74144.27516381041042118.9428397296214593.6105156488324812.666162040394488
75144.7155226374701119.1966025852843493.677682533098612.759460026092867
76145.0022544018757119.405691471399793.8091285409237212.798281465237988
77145.17232962143495119.5754406522595693.9785516830841612.798444484587694
78145.26426650943495119.7145354814394694.1648044534439512.774865513997753
79145.3132545167523119.8337393327608394.3542241487693512.73975759199574
80145.34977527237984119.9445425535481994.5393098347165212.702616359415833
81145.40173428451556120.06001294330794.7182916020984512.670860670604275