Benchmark

Thirty BaZi charts you can test against

Two calculators disagreeing on a chart is not an argument — it is a bug in one of them. This is a fixed set of inputs and answers, so the disagreement becomes measurable.

The four pillars are arithmetic, not interpretation. That is the only thing this benchmark asserts. Element weights are included but compared with a tolerance, because the coefficients are a modelling choice and differ between schools.

Download the set

The archive contains the data, the reference engine, and a harness that re-runs every case. No dependencies, no account, no build step.

Download ZIP

Then: unzip bazi-benchmark.zip && cd bazi-benchmark && node harness/run.mjs  ·  raw data: reference-charts.json  ·  code MIT, data CC BY 4.0

Current result

30 reference charts, all four pillars agree. Engine against locked expectations: 30/30. Engine against an independent implementation that shares no code: 30/30. Element weights within 0.6 points: 30/30.

Run on 2026-10-20. Regenerated from the same suite the live site runs at /tests.

The conventions this set assumes

Most disagreements between BaZi calculators are disagreements about conventions, not arithmetic errors. Stating them is what makes a mismatch diagnosable.

QuestionThis set uses
When does the day pillar advance?23:00 local true solar time (子时换日). Not midnight.
Year and month read from local or absolute time?Absolute instant (UTC) — solar terms happen at one moment worldwide.
Correct clock time to true solar time?Yes — longitude offset from the standard meridian, plus equation of time.
Which terms start a month?The twelve 節 (立春, 惊蛰, 清明 …), not the 中氣.
Leap lunar monthCreates no month pillar. Months follow solar terms.
Element weightsstems 1.0, branches 0.8, hidden stems 0.3 each, normalised to 100%.

How far the clock is from the sun

Every case below stores the shift between the clock on the wall and the sun at the birthplace: longitude offset from the standard meridian, plus the equation of time. Across these 30 charts it is not a rounding detail — the median is 16 minutes, and the largest, Madrid keeping CET at 3.7°W, is 85.

True solar time correction for the 30 reference charts: median 16 minutes, largest 85 minutes for Madrid
Generated from data/reference-charts.json, not drawn by hand. Rebuild with python chart/make-chart.py.

A shift of s minutes moves a uniformly-timed birth across a two-hour pillar boundary with probability s/120, and across the 23:00 day boundary with probability s/1440. At the mean shift of 20 minutes that is 17% of charts landing in the wrong hour pillar and 1.4% in the wrong day pillar — for any calculator that skips the correction entirely.

The 30 cases

#Local timePlaceExpected pillarsTrue solarGoverning term
11990-05-20 14:30New York City庚午 辛巳 乙酉 癸未1990-05-20 13:37Lixia
21990-01-20 14:30New York City己巳 丁丑 乙酉 癸未1990-01-20 14:23Xiaohan
32023-07-01 23:30New York City癸卯 戊午 庚申 丁亥2023-07-01 22:30Mangzhong
42023-01-01 06:15New York City壬寅 壬子 己未 丁卯2023-01-01 06:16Daxue
52023-11-05 01:30New York City癸卯 壬戌 丁卯 庚子2023-11-05 00:50Hanlu
62000-01-01 12:00London己卯 丙子 戊午 戊午2000-01-01 11:56Daxue
71975-08-15 04:45London乙卯 甲申 癸巳 甲寅1975-08-15 03:39Liqiu
82010-06-21 18:00Paris庚寅 壬午 壬寅 戊申2010-06-21 16:08Mangzhong
92010-12-21 18:00Paris庚寅 戊子 乙巳 乙酉2010-12-21 17:11Daxue
101995-09-09 09:09Berlin乙亥 乙酉 癸卯 丙辰1995-09-09 08:05Bailu
112022-03-15 07:20Madrid壬寅 癸卯 丁卯 癸卯2022-03-15 05:55Jingzhe
121988-04-02 22:10Sydney戊辰 乙卯 丁亥 辛亥1988-04-02 22:11Jingzhe
132001-12-25 11:00Sydney辛巳 庚子 壬戌 乙巳2001-12-25 10:05Daxue
141969-07-20 20:17Melbourne己酉 辛未 丙申 戊戌1969-07-20 19:50Xiaoshu
151993-10-30 16:00Auckland癸酉 壬戌 甲申 辛未1993-10-30 14:55Hanlu
162015-04-01 05:30Auckland乙未 己卯 丁未 壬寅2015-04-01 04:04Jingzhe
171999-07-04 13:45Toronto己卯 庚午 丁巳 丙午1999-07-04 12:23Mangzhong
181999-02-04 13:45Toronto己卯 丙寅 丁亥 丁未1999-02-04 13:13Lichun
192008-08-08 20:00Beijing戊子 庚申 庚辰 丙戌2008-08-08 19:39Liqiu
202020-02-29 10:00Shanghai庚子 戊寅 壬寅 乙巳2020-02-29 09:52Lichun
211997-05-05 03:00Tokyo丁丑 甲辰 丁未 壬寅1997-05-05 03:22Qingming
222012-11-11 11:11Seoul壬辰 辛亥 丙子 癸巳2012-11-11 10:54Lidong
231980-03-21 21:00Singapore庚申 己卯 癸巳 壬戌1980-03-21 20:17Jingzhe
242018-06-15 14:00Dubai戊戌 戊午 戊寅 己未2018-06-15 13:41Mangzhong
251991-12-31 23:45Mumbai辛未 庚子 丙子 戊子1991-12-31 23:03Daxue
262005-01-15 08:00Johannesburg甲申 丁丑 己亥 戊辰2005-01-15 07:43Xiaohan
272016-08-05 19:30Sao Paulo丙申 乙未 己未 甲戌2016-08-05 19:17Xiaoshu
281978-02-28 12:00Mexico City戊午 甲寅 辛酉 甲午1978-02-28 11:10Lichun
291949-10-01 15:00Beijing己丑 癸酉 甲子 辛未1949-10-01 14:56Bailu
302026-01-01 00:05Los Angeles乙巳 戊子 乙亥 丙子2026-01-01 00:09Daxue

Latitude, longitude, timezone, DST offset and the full solar-time correction for each case are in the JSON, not in this table.

What this benchmark does not cover

Every one of the 30 cases sits clear of a solar-term boundary — which is exactly why two implementations can be compared at all. The independent implementation solves solar terms with the Meeus low-precision series, documented in its own source as good to roughly ±15 minutes.

That was measured, not assumed. Sweeping minute by minute across 立春 2026-02-04 04:02:08 (UTC+8), the two agree from 10 minutes out and start to disagree inside roughly 6 minutes before the term. So this page claims one thing and not the other:

✅ 30 charts, all four pillars agree with locked values and with an independent implementation.   ❌ Anything about the last few minutes before a solar term. Those are shown here instead of being folded into a pass rate. Boundary cases are the most useful thing you could contribute.

Score your own calculator

Write the four pillars your implementation produces for each case id, then:

node harness/compare.mjs my-results.json

Only pillars are compared. If your calculator is right and this set is wrong, that is worth an email — a benchmark that cannot be contradicted is not a benchmark.

Citing this

WuWay, "BaZi reference charts", https://getwuway.com/benchmark (2026-10-20)

Data CC BY 4.0 — reuse with attribution. Code MIT. The same charts with the full derivation are at /reference-charts.

The set also lives on GitHub, so you can run it without trusting this site: github.com/getwuway/bazi-benchmark  ·  CITATION.cff included for reference managers.

The live verification run  ·  Boundary cases  ·  Calculate your own