Files
wickra/testdata/golden/g_Camarilla.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

13 KiB

1ppr1r2r3r4s1s2s3s4
299.66666666666667100.275100.55100.825101.6599.72599.4599.17598.35
3103.16267454598328103.7780337561168104.10086544562022104.42369713512362105.39219220363384103.13237037710999102.80953868760658102.48670699810317101.51821192959295
4106.46632396532765106.96961867057054107.29281260719073107.61600654381093108.58558835367148106.32323079733017106.00003686070998105.67684292408978104.70726111422923
5109.30969002905226109.60221419837052109.8711593004662110.14010440256189110.94693970884894109.06432399417915108.79537889208346108.52643378998778107.71959848370072
6111.45910647185464111.57257823345337111.82476560723448112.0769529810156112.83351510235893111.06820348589115110.81601611211003110.56382873832892109.80726661698559
7112.74199773788952112.76387649333724113.05280312063391113.3417297479306114.20850962982065112.18602323874386111.89709661144718111.60816998415049110.74139010226044
8113.06847380764877113.09245340010824113.44643049143453113.80040758276081114.86233885673968112.38449921745567112.03052212612938111.6765450348031110.61461376082423
9112.44424589558567112.49132701898097112.85056037147318113.2097937239654114.28749378144207111.77286031399652111.4136269615043111.05439360901208109.97669355153542
10110.97251301246604111.05574857922898111.35686535294643111.6579821266639112.56133244781628110.45351503179404110.15239825807659109.85128148435912108.94793116320673
11108.84406406881523108.97799635816386109.18219391398941109.38639146981497109.99898413729163108.56960124651275108.3654036906872108.16120613486164107.54861346738498
12106.3166460187776106.68075955248203106.95031902436538107.21987849624873108.02855691189879106.14164060871532105.87208113683197105.60252166494863104.79384324929856
13103.68631980047041104.26141987598294104.60029669339836104.93917351081379105.95580396306005103.58366624115209103.24478942373666102.90591260632124101.88928215407498
14101.25473880483469101.92448274323586102.27416991942023102.6238570956046103.67291862415775101.2251083908671100.87542121468273100.5257340384983699.47667250994522
1599.2968091995842599.92444295706736100.22654750597445100.52865205488155101.4349657016028399.3202338592531699.0181293103460798.7160247614389797.80971111471769
1698.0329415244163498.5702772360270198.856312196189999.1423471563528100.000452036841597.9982073157012297.7121723555383397.4261373953754396.56803251488674
1797.6091537174040398.0204458388146498.3161928542802698.6119398697458799.499180916142797.4289518078834297.133204792417896.8374577769521995.95021673055535
1898.0868539229111398.3247827065795898.6112115015175998.8976402964555899.7569266812695697.751925116703697.465496321765697.1790675268276196.31978114201362
1999.4425238109509599.5370335030905199.83221382945834100.12739415582618101.0129351349296998.9466728503548398.65149252398798.3563121976191697.47077121851565
20101.57606521173501101.5422908444415101.81222656444285102.08216228444422102.89196944444832101.00241940443875100.7324836844374100.4625479644360399.65274080443193
21104.32553529275576104.32926258320965104.66538059239568105.0014986015817106.00985262913977103.65702656483761103.32090855565158102.98479054646556101.97643651890749
22107.48553552770288107.55689891578143107.90795281355214108.25900671132284109.31216840463496106.85479112024004106.50373722246933106.15268332469863105.09952163138651
23110.82665131417549110.9725900160979111.2770410273523111.5814920386067112.49484507236991110.3636879935891110.0592369823347109.7547859710803108.84143293731708
24114.11393840247109114.3269385068177114.53846337850163114.74998825018555115.38456286523734113.90388876344986113.69236389176592113.480839020082112.84626440503021
25117.12329605763098117.54705712667621117.80971660947044118.07237609226466118.86035454064734117.02173816108777116.75907867829353116.49641919549931115.70844074711664
26119.6553939855807120.27872556278697120.62077248708242120.96281941137788121.98896018426422119.59463171419608119.25258478990064118.91053786560518117.88439709271884
27121.54740034135453122.24423032717334122.60846088659929122.97269144602525124.0653831243031121.51576920832144121.1515386488955120.78730808946953119.69461641119169
28122.68295119326267123.3073924174329123.62935138111975123.95131034480659124.91718723586712122.66347449005922122.34151552637236122.01955656268552121.05367967162499
29123.0005912206809123.44138791563655123.68387772282226123.92636753000795124.65383695156505122.95640830126517122.71391849407946122.47142868689377121.74395926533667
30122.50041000814686122.8043699910581123.0627509012334123.32113181140869124.09627454193458122.28760817070751122.02922726053221121.77084635035692120.99570361983103
31121.2480003897514121.43656394581242121.743435590803122.0503072357936122.97092217076536120.82282065583124120.51594901084066120.20907736585006119.2884624308783
32119.37441415670385119.4508496779621119.78051450350664120.11017932905116121.09917380568476118.79152002687304118.4618552013285118.13219037578398117.14319589915038
33117.0706953893436117.04388229553408117.34322035599752117.64255841646096118.54057259785128116.4452061746072116.14586811414375115.84653005368031114.94851587228999
34114.57595201454465114.56429357775264114.87185496773508115.17941635771751116.10210052766485113.94917079778776113.64160940780532113.33404801782288112.41136384787555
35112.1587734147477112.25441963456801112.58419820688923112.91397677921046113.90331249617411111.59486248992557111.26508391760436110.93530534528313109.94596962831947
36110.09297423674845110.29889128757917110.59652945109374110.89416761460834111.78708210515208109.70361496054998109.40597679703541109.10833863352082108.21542414297707
37108.62989574587948108.96069883714864109.218355274014109.47601171087935110.24898102147542108.44538596341795108.18772952655259107.93007308968724107.15710377909117
38107.97053212992039108.44066080423896108.69068390914283108.94070701404672109.69077632875835107.94061459443121107.69059148952734107.44056838462345106.69049906991182
39108.24129915337737108.88756232781016109.2206505376602109.55373874751025110.55300337706038108.22138590811007107.88829769826002107.55520948840997106.55594485885985
40109.47714653729103110.17185510429249110.53699546523174110.90213582617098111.99755690898873109.44157438241399109.07643402147474108.7112936605355107.61587257771775
41111.61489250420503112.21228559059719112.54440702038471112.87652845017223113.8728927395348111.54804273102215111.21592130123463110.88379987144711109.88743558208454
42114.49824346605784114.87984470625676115.12541859251787115.37099247877899116.10771413756234114.38869693373454114.14312304747342113.89754916121231113.16082750242896
43117.8942032754348118.09616043868955118.32463879103715118.55311714338472119.23855220042748117.63920373399439117.4107253816468117.18224702929922116.49681197225647
44121.51880689228612121.65250649348452121.96878251475769122.28505853603085123.23388659985032121.01995445093822120.70367842966505120.38740240839189119.43857434457242
45125.06867496722403125.12761411184715125.48048383231736125.83335355278759126.89196271419824124.4218746709067124.0690049504365123.71613522996627122.65752606855561
46128.2540554225371128.24868876856593128.57664239005965128.90459601155334129.88845687603444127.59278152557853127.26482790408484126.93687428259113125.95301341811003
47130.82894581221407130.80892818262987131.08001209974353131.35109601685716132.16434776819813130.26676034840256129.9956764312889129.72459251417527128.9113407628343
48132.61456770121885132.73386525487982133.03077381531858133.32768237575732134.21840805707362132.14004813400228131.84313957356352131.54623101312478130.65550533180848
49133.51372898547731133.7734240495645134.05375421164987134.3340843737352135.17507485999127133.21276372539384132.93243356330848132.65210340122314131.81111291496708
50133.51518476304713133.9537560811636134.2509343968344134.54811271250523135.43964765951765133.35939944982198133.06222113415117132.76504281848034131.87350787146792
51132.68866514679192133.23806839554868133.518668479668133.79926856378734134.6410688161453132.67686822731002132.3962681431907132.11566805907137131.2738678067134
52131.17247746428333131.8163220706958132.12976573982044132.44320940894505133.38354041631897131.18943473244653130.8759910633219130.56254739419728129.62221638682337
53129.1563006939515129.81967906149674130.17195239168734130.52422572187794131.58104571244974129.11513240111555128.76285907092495128.41058574073435127.35376575016255
54126.86189674888487127.40847514811799127.73941377324154128.0703523983651129.06316827373576126.74659789787088126.41565927274733126.08472064762378125.09190477225312
55124.52403581279573124.84496825109156125.09852231592498125.35207638075842126.11273857525872124.33786012142468124.08430605659126123.83075199175782123.07008979725752
56122.37315973892662122.49512526070693122.7144703853985122.93381551009008123.59185088416483122.05643501132376121.83708988663219121.6177447619406120.95970938786586
57120.62044223256866120.6968255527843121.01150452925984121.32618350573539122.27022043516199120.06746759983324119.7527886233577119.43810964688215118.49407271745555
58119.44519828628948119.48734463199692119.85035959980887120.21337456762083121.30241947105671118.76131469637299118.39829972856104118.03528476074908116.9462398573132
59118.98423170775713119.00608999479411119.35283004040464119.69957008601519120.73979022284678118.31260990357305117.96586985796252117.61912981235197116.57890967552038
60119.32275870519119.34716359875881119.62092100222395119.89467840568909120.71595061608453118.79964879182853118.52589138836339118.25213398489825117.43086177450282
61120.48694857241185120.6291587967551120.88414209142206121.13912538608902121.9040752700899120.1191922074212119.86420891275424119.60922561808728118.8442757340864
62122.4387103823207122.77161505708187123.0531025818805123.33459010667913124.179052681075122.2086400074846121.92715248268598121.64566495788735120.80120238349147
63125.07389544503057125.6039558312047125.93099755867671126.25803928614873127.23916446856478124.94987237626066124.62283064878865124.29578892131663123.31466373890058
64128.2253492633656128.84785962930889129.16545587598398129.4830521226591130.43584086268444128.21266713595864127.89507088928353127.57747464260842126.62468590258308
65131.67207090888238132.2896676353533132.57510839263853132.86054914992377133.71687142177942131.71878612078288131.43334536349766131.14790460621242130.29158233435678
66135.15507483469676135.7598309638397136.08651263948047136.41319431512125137.3932393420436135.10646761255816134.7797859369174134.45310426127662133.47305923435428
67138.3994880837803138.8731449458564139.1908911945168139.5086374431772140.46187618915837138.2376524485356137.91990619987521137.60215995121482136.64892120523365
68141.1411629574787141.39443335426606141.6521293334611141.9098253126561142.68291325024117140.87904139587604140.621345416681140.363649437486139.59056149990093
69143.154923777789143.23994258729024143.48863963810155143.73733668891285144.48342784134675142.74254848566764142.49385143485634142.24515438404504141.49906323161113
70144.28078575968826144.3010611099437144.60419321846072144.9073253269777145.81672165252874143.69479689290972143.3916647843927143.0885326758757142.17913635032468
71144.44430932083742144.4709947348903144.83046222475943145.18992971462856146.26833218423596143.75205975515203143.3925922652829143.03312477541377141.95472230580637
72143.66778712039107143.72015549733024144.0737546092999144.42735372126958145.4881510571786143.01295727339087142.6593581614212142.30575904945152141.2449617135425
73142.07015356602253142.16055651565432142.44688706980628142.7332176239582143.59220928641403141.58789540735046141.3015648531985141.01523429904657140.15624263659075
74139.85515947975856140.01986187563278140.22721883471613140.4345757937995141.05664667104958139.60514795746604139.3977909983827139.19043403929933138.56836316204925
75137.28916235919314137.69477198042676137.97931979885507138.26386761728335139.11751107256825137.1256763435702136.8411285251419136.55658070671362135.70293725142872
76134.6714977766173135.27173843175984135.6168410695873135.96194370741475136.9972516208971134.58153315610497134.2364305182775133.89132788045006132.85601996696772
77132.3015073284582132.97365009660936133.31904531782385133.6644405390383134.70062620268175132.28285965418044131.93746443296595131.5920692117515130.55588354810806
78130.44669455820846131.05478070846547131.34450897737338131.6342372462813132.503422053005130.47532417064966130.18559590174175129.89586763283384129.02668282611012
79129.31610321851522129.83864309660322130.12915987140326130.41967664620327131.2912269706034129.25760954700314128.9670927722031128.6765759974031127.80502567300299
80129.04196344134022129.4238197929536129.7167951671137130.00977054127378130.88869666375405128.83786904463344128.54489367047333128.25191829631325127.37299217383298
81129.6711671025228129.8863359319469130.17752707286533130.4687182137838131.3422916365392129.30395365010995129.0127625091915128.72157136827303127.84799794551763