'use strict'; const test=require('node:test'),assert=require('node:assert/strict'),cal=require('./web/calendar.js'); test('Spring Festival and leap month are bidirectional',()=>{ assert.deepEqual(cal.lunar('2024-02-10'),{year:2024,month:1,day:1,leap:false}); assert.equal(cal.solar('2024-01-01'),'2024-02-10'); assert.deepEqual(cal.lunar('2023-03-22'),{year:2023,month:2,day:1,leap:true}); assert.equal(cal.solar('2023-02-01',true),'2023-03-22'); assert.equal(cal.solar('2023-02-01',false),'2023-02-20'); }); test('all days across a leap year round trip',()=>{ for(let n=0;n<366;n++){const s=new Date(Date.UTC(2024,0,1+n,12)).toISOString().slice(0,10),l=cal.lunar(s);assert.equal(cal.solar(cal.iso(l),l.leap),s);} }); test('invalid dates, nonexistent leap months and range are explicit',()=>{ for(const s of ['2026-02-30','2026-13-01','bad'])assert.throws(()=>cal.solarDate(s)); assert.throws(()=>cal.solar('2024-02-01',true));assert.throws(()=>cal.solar('2024-12-31'));assert.throws(()=>cal.lunar('1800-01-01')); assert.equal(cal.describe('1800-01-01'),'1800-01-01(公历)'); });