Files
wickra/testdata/golden/g_ClassicPivots.csv
T
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

10 KiB

1ppr1r2r3s1s2s3
299.66666666666667101.33333333333334102.66666666666667104.3333333333333498.3333333333333496.6666666666666795.33333333333334
3103.16267454598328105.06983843086239106.68447479511136108.59163867999047101.5480381817343199.640874296855298.02623793260624
4106.46632396532765108.3192503675673109.99207600118424111.8450024034239104.79349833171071102.94057192947105101.26774629585411
5109.30969002905226110.78845284682183112.24363659736883113.7223994151384107.85450627850526106.37574346073569104.92055971018868
6111.45910647185464112.76531615911497114.21024145855769115.51645114581802110.01418117241192108.70797148515159107.26304618570887
7112.74199773788952114.1844372235833115.89392458112607117.33636406681985111.03251038034675109.59007089465297107.8805835371102
8113.06847380764877114.83425919272239116.93004207666282118.69582746173643110.97269092370834109.20690553863473107.1111226546943
9112.44424589558567114.24762443099476116.36315519550081118.1665337309099110.32871513107962108.52533659567052106.40980583116448
10110.97251301246604112.50602753835673114.25742327120199115.79093779709268109.22111727962078107.68760275373009105.93620702088484
11108.84406406881523109.92273628553433111.07167376873036112.15034598544946107.69512658561919106.6164543689001105.46751688570406
12106.3166460187776107.83424744177915109.25729480295962110.77489622596117104.89359865759714103.37599723459559101.95294987341512
13103.68631980047041105.65285043360308107.38315780863867109.34968844177133101.9560124254348299.9894817923021698.25917441726656
14101.25473880483469103.3221517833124105.06950799957335107.1369209780510799.5073825885737597.4399696100960395.69261339383509
1599.29680919958425101.10741679791094102.59249518766164104.4031027859883497.8117308098335596.0011232115068594.51604482175615
1698.0329415244163499.71878259193784101.15332290801157102.8391639755330796.5984012083426194.9125601408211193.47801982474738
1797.6091537174040399.28009180927988100.83548479521072102.5064228870865796.0537607314731994.3828226395973492.8274296536665
1898.0868539229111399.62494279875634101.21153168587108102.7496205617162896.5002650357963994.9621761599511893.37558727283644
1999.44252381095095100.95226300129774102.6626728258728104.172412016219697.7321139863758896.2223747960290994.51196497145402
20101.57606521173501102.89658682264047104.52081852084083105.8413401317462999.9518335135346598.631311902629297.00708020442883
21104.32553529275576105.99271089258619107.99227721114875109.65945281097918102.3259689741932100.6587933743627798.65922705580022
22107.48553552770288109.26052971524246111.31521441247419113.09020860001377105.43085083047114103.65585664293157101.60117194569983
23110.82665131417549112.40803703907896114.14793507331443115.7293207982179109.08675327994003107.50536755503656105.76546952080109
24114.11393840247109115.26844804616931116.42148245720485117.57599210090306112.96090399143556111.80639434773734110.6533599367018
25117.12329605763098118.63653493872498119.98867223356798121.50191111466198115.77115876278798114.25791988169398112.90578258685098
26119.6553939855807121.66174680819312123.38681497789469125.3931678005071117.93032581587913115.92397299326672114.19890482356514
27121.54740034135453123.70041219687434125.52082462600127127.67383648152108119.7269879122276117.57397605670779115.75356362758086
28122.68295119326267124.59033212543261126.19523079711914128.1026117292891121.07805252157614119.1706715894062117.56577291771967
29123.0005912206809124.42241634012424125.64593457179761127.06775969124095121.77707298900754120.3552478695642119.13172963789083
30122.50041000814686123.9325499636528125.31911084642282126.75125080192876121.11384912537684119.6817091698709118.29514828710089
31121.2480003897514122.86269168159892124.595691062376126.21038235422353119.51500100897431117.90030971712679116.1673103363497
32119.37441415670385121.04597128025816122.97075770809873124.64231483165304117.44962772886328115.77807060530897113.8532841774684
33117.0706953893436118.54037286928043120.33620150349023121.80587898342706115.2748667551338113.80518927519697112.00936064098717
34114.57595201454465116.09394968287982117.93116717798947119.44916484632463112.73873451943501111.22073685109984109.3835193559902
35112.1587734147477113.84049945115845115.7563578400701117.43808387648085110.24291502583606108.5611889894253106.64533060051366
36110.09297423674845111.67059457230425113.33993602054392114.91755635609972108.42363278850878106.84601245295298105.17667100471331
37108.62989574587948110.07186781961968111.44069323895606112.88266531269626107.2610703265431105.8190982528029104.45027283346653
38107.97053212992039109.44434730501251110.69805691068996112.17187208578208106.71682252424294105.24300734915082103.98929774347337
39108.24129915337737110.214731416669111.87498871537785113.84842097866948106.58104185466851104.60760959137689102.94735229266803
40109.47714653729103111.63360533635442113.46049592935555115.61695472841893107.65025594428991105.49379714522652103.6669065522254
41111.61489250420503113.55909976771203115.23803537461436117.18224263812135109.9359568973027107.9917496337957106.31281402689338
42114.49824346605784115.90575106808735117.17723131617909118.5847389182086113.22676321796611111.8192556159366110.54777536784486
43117.8942032754348119.12718823914791120.3866943919539121.619679355667116.63469712262882115.40171215891571114.14220600610973
44121.51880689228612123.15266061646597124.96909076072058126.60294448490042119.70237674803151118.06852302385167116.25209287959706
45125.06867496722403126.84645360913802128.91816282689916130.69594146881315122.9969657494629121.2191871075489119.14747788978778
46128.2540554225371129.87623322022483131.83173129337746133.4539090910652126.29855734938448124.67637955169674122.72088147854411
47130.82894581221407132.1620345867578133.78622490799935135.1193136825431129.20475549097253127.87166671642879126.24747639518725
48132.61456770121885134.14526343658682135.85357017873258137.38426591410055130.90626095907308129.3755652237051127.66725848155934
49133.51372898547731135.03248504785287136.57187620822657138.09063227060213131.97433782510362130.45558176272806128.91619060235436
50133.51518476304713135.20685389520168136.75713002491054138.44879915706508131.96490863333827130.27323950118372128.72296337147486
51132.68866514679192134.35361264248874135.7497569735482137.414704469245131.29252081573247129.62757332003565128.2314289889762
52131.17247746428333133.04737067360705134.59186294564296136.46675615496667129.62798519224742127.7530919829237126.2085997108878
53129.1563006939515131.23334410457753132.99928247784894135.07632588847497127.39036232068008125.31331891005405123.54738053678264
54126.86189674888487128.77483640934082130.47213629568728132.38507595614323125.16459686253845123.25165720208248121.55435731573606
55124.52403581279573125.94074717134566127.29008015643319128.70679151498314123.1747028277082121.75799146915827120.40865848407074
56122.37315973892662123.52089789033414124.76601564465295125.91375379606048121.1280419846078119.98030383320028118.73518607888147
57120.62044223256866122.21772518521438124.05330379411997125.65058674676568118.78486362366307117.18758067101736115.35200206211177
58119.44519828628948121.26484561784791123.40536157151085125.22500890306928117.30468233262654115.48503500106811113.34451904740517
59118.98423170775713120.71310016816417122.76685038714477124.49571884755181116.93048148877654115.2016130283695113.1478628093889
60119.32275870519120.69130465096077122.3092031066279123.67774905239868117.70486024952287116.33631430375209114.71841584808496
61120.48694857241185121.8213800081607123.26858451423321124.60301594998207119.03974406633934117.70531263059048116.25810812451797
62122.4387103823207123.99980545620357125.50948338012392127.07057845400679120.92903245840036119.36793738451749117.85825946059714
63125.07389544503057126.95926874241083128.64162338108895130.52699667846917123.39154080635247121.50616750897221119.8238128702941
64128.2253492633656130.11014948668213131.69003559073047133.574835814047126.64546315931725124.76066293600071123.18077683195237
65131.67207090888238133.39509847866734134.7859700792666136.50899764905157130.2811993082831128.55817173849815127.16730013789888
66135.15507483469676137.07601211039753138.71887493259612140.6398122082969133.51221201249817131.5912747367974129.9484119145988
67138.3994880837803140.21060474681758141.86581079643918143.67692745947645136.74428203415872134.93316537112145133.27795932149985
68141.1411629574787142.5445645982477143.95239182142438145.35579346219336139.73333573430202138.32993409353304136.92210687035634
69143.154923777789144.4296140251956145.8679825139123147.1426727613189141.71655528907232140.44186504166572139.00349655294903
70144.28078575968826145.7928052451957147.58768148896465149.09970097447209142.4859095159193140.97389003041187139.1790137866429
71144.44430932083742146.23865004585184148.3657728466825150.1601135716969142.31718652000677140.52284579499235138.3957229941617
72143.66778712039107145.44589418180132147.52523197824206149.30333903965231141.58844932395033139.81034226254008137.73100446609934
73142.07015356602253143.5339927864094145.1937596113164146.6575988317033140.41038674111553138.94654752072864137.28678069582165
74139.85515947975856140.9648701567905142.11723539703158143.22694607406353138.7027942395175137.59308356248553136.44071832224446
75137.28916235919314138.9017722702047140.3933203784109142.00593028942245135.79761425098695134.1850043399754132.6934562317692
76134.6714977766173136.6814448097882138.43625382564397140.44620085881488132.9166887607615130.9067417275906129.15193271173482
77132.3015073284582134.34885503582368136.06945519625245138.11680290361792130.58090716802943128.53355946066395126.81295930023518
78130.44669455820846132.18620951110796133.60736658265836135.34688153555786129.02553748665807127.28602253375857125.86486546220817
79129.31610321851522131.01675172361394132.4853771254247134.1860256305234127.8474778167045126.14682931160577124.67820390979504
80129.04196344134022130.68445142548555132.23805843217755133.8805464163229127.48835643464821125.84586845050288124.29226144381087
81129.6711671025228131.2214712608763132.8477977307242134.39810188907774128.0448406326749126.49453647432136124.86821000447347