Skip to content

Oracle Testing

Oracle tests compare Formulon against values captured from real Excel builds. They are the empirical layer of the compatibility story — what Excel actually does on a given workbook and locale, not what the documentation says it should.

Glossary: oracle data

A captured set of Excel-produced values for a known workbook, profile, and build. Tests load the workbook, recalculate with Formulon, and compare against the captured values. When they disagree, Excel is treated as the source of truth.

Glossary: accepted divergence

A case where Formulon deliberately differs from Excel. Each accepted divergence carries a reason (security, deterministic behavior, fixed Excel bug, …) and a last-verified Excel build. Accepted divergences are documented rather than hidden behind generic "Excel-like" claims.

Current results

Where the oracle tracks stand today. Each row is what the suite reports on the checked-in goldens, not an aspiration.

TrackResultDocumented skips / divergencesGolden source
Primary formula oracle4423/4423 passing125 documented skipsMac Excel 365 ja-JP (mac-365-ja_JP)
Conditional-formatting oracle23/23 passingMac Excel 365 ja-JP (mac-365-ja_JP)
Imported third-party engine corpus (cross-check)12510/12510 passing168 divergencesThird-party engine, not Excel
Workbook oracle (pivot + print)66/66 passing10 documented skipsProduct-verified Windows Microsoft 365 ja-JP (win-365-ja_JP)

103 oracle categories are defined. The formula and conditional-formatting tracks regenerate from Mac Excel 365 ja-JP; the workbook track regenerates from Windows Excel 365 ja-JP. Workbook goldens carry a capture identifier that pins every suite to a single verified Microsoft 365 session.

Of the 522 catalogued functions, 518 satisfy all six closure conditions (behaviors_declared, cases_cover_behaviors, golden_present, divergence_documented, not_in_pilot, behavior_drift). The remaining four — ARRAYTOTEXT, FILTERXML, GETPIVOTDATA, PHONETIC — fail only behaviors_declared; their behavior taxonomy is under-specified rather than unimplemented. JIS closes as a declared alias of DBCS: Excel rewrites that ja-JP formula-bar spelling before it stores or evaluates a formula, so no oracle case can name it, and the closure harness resolves the alias to the function it defers to.

Every skip is an explicit divergence, host-service dependency, volatile or environment-bound case, or driver limitation — none is a silent stub. Each carries the Excel build it was last verified against in tests/divergence.yaml.

Why oracle data matters

Spreadsheet behavior includes many undocumented details: rounding edges, how TEXT() formats locale-specific digits, how DATEVALUE() handles two-digit years, how blank values coerce, how spill collisions interact with merged cells. Committed goldens (tests/oracle/*/golden) turn those details into reviewable data and make compatibility regressions visible at PR time rather than after deployment.

How a failure is interpreted

Oracle test failsFormulon ≠ capturedExcel valueWrong value?yes → Formulon bug:fix engine, add agoldenExcel build changed?yes → profile drift:re-capture, documentNOW / RAND /network dependent?yes → volatilegolden: re-capturecontrolled, or markvolatileAccepted divergencerecord reason + last-verified buildOracle test failsFormulon ≠ captured Excel valueWrong value?yes → Formulon bug: fix engine, adda goldenExcel build changed?yes → profile drift: re-capture,documentNOW / RAND / network dependent?yes → volatile golden: re-capturecontrolled, or mark volatileAccepted divergencerecord reason + last-verified build

A failure usually falls into one of four buckets:

BucketWhat it meansTypical fix
Formulon bugEngine produced the wrong valueFix the engine, add a regression golden
Profile driftTargeted Excel build changedRe-capture the golden, document the change
Volatile goldenCaptured value depended on NOW / RAND / networkRe-capture with controlled inputs, or mark the golden as volatile
Accepted divergenceThe case is documented as intentionally differentRecord it in the divergence list with reason + last-verified build

Contributing data

Locale coverage grows when contributors run the oracle capture flow on their own Excel installations and donate the resulting goldens. The same workbook can be captured on win-365-ja_JP, mac-365-ja_JP, and other profiles, expanding what the engine can validate against. See Oracle contribution for the capture flow.

The formula and conditional-formatting tracks use mac-365-ja_JP as their primary profile. The workbook track uses the product-verified Windows Microsoft 365 win-365-ja_JP profile.