Jak sprawdzić poprawność obliczenia kalendarza chińskiego
Daty odniesienia
Sprawdzaj osobno przeliczanie dat księżycowych, czas okresów solarnych, klasyfikacje almanachu i zachowanie interfejsu. Zgodność w jednej części nie dowodzi poprawności pozostałych. Przydatny zestaw kontroli obejmuje granice miesięcy i lat, a także daty wewnątrz miesiąca.
Wybierz niezależne źródło odniesienia z podaną konwencją kalendarzową i zakresem. Druga witryna używająca tego samego silnika obliczeniowego może powielać te same błędy. Zapisz wydanie lub wersję źródła obok oczekiwanych wartości, aby można było prześledzić późniejszą zmianę.
Atlas obsługuje daty cywilne od 1 do 2100 r. n.e. Jego silnik obliczeniowy w ustalonej wersji stosuje juliańskie daty cywilne do 1582-10-04, a następnie gregoriańską datę 1582-10-15. Daty od 5 do 14 października nie występują w tej sekwencji dat cywilnych. Porównanie z kalendarzem gregoriańskim rozszerzonym wstecz przed jego wprowadzenie, zwanym proleptycznym kalendarzem gregoriańskim, sprawdza inne przyporządkowanie wcześniejszych dat.
Konwencja ta opisuje oznaczenia dat cywilnych w oprogramowaniu. Nie ustala, jakiego kalendarza używano historycznie w Chinach. Sprawdź obsługiwane daty skrajne i postępowanie z datami spoza zakresu. Zakres dat cywilnych różni się również od zakresu pełnych lat księżycowych, których granice przypadają w innych dniach.
Zapisuj każdy wynik jako pełną datę cywilną i konwencję kalendarzową, rok księżycowy, numer miesiąca księżycowego, znacznik przestępności i dzień księżycowy. Odróżniaj numer miesiąca od jego pozycji w roku: przestępny szósty miesiąc jest siódmym miesiącem w porządku chronologicznym, lecz jego numer nadal wynosi sześć.
Przypadki testowe
Kontrole dokładnych dat
Te daty obejmują Chiński Nowy Rok, prawidłowy gregoriański dzień przestępny oraz oba końce zwykłych i przestępnych miesięcy księżycowych. W tej tabeli oznaczeniem roku księżycowego jest rok gregoriański, w którym ten rok księżycowy się rozpoczyna. „Zwykły” oznacza, że znacznik przestępności ma wartość false.
| Data gregoriańska | Rok księżycowy | Miesiąc | Rodzaj | Dzień księżycowy |
|---|---|---|---|---|
| 2024-02-09 | 2023 | 12 | Zwykły | 30 |
| 2024-02-10 | 2024 | 1 | Zwykły | 1 |
| 2024-02-29 | 2024 | 1 | Zwykły | 20 |
| 2025-07-24 | 2025 | 6 | Zwykły | 30 |
| 2025-07-25 | 2025 | 6 | Przestępny | 1 |
| 2025-08-22 | 2025 | 6 | Przestępny | 29 |
| 2025-08-23 | 2025 | 7 | Zwykły | 1 |
| 2033-12-21 | 2033 | 11 | Zwykły | 30 |
| 2033-12-22 | 2033 | 11 | Przestępny | 1 |
| 2034-01-19 | 2033 | 11 | Przestępny | 29 |
| 2034-01-20 | 2033 | 12 | Zwykły | 1 |
| 2034-02-19 | 2034 | 1 | Zwykły | 1 |
Przelicz każdą datę w obu kierunkach. Przeliczenie gregoriańskie na księżycowe powinno dać wszystkie cztery pola księżycowe, a przeliczenie księżycowe na gregoriańskie powinno odtworzyć podaną datę. Następnie sprawdź całą sekwencję wokół granicy, a nie tylko jej pierwszy dzień. Pozwala to odróżnić błędny początek miesiąca od oznaczenia na ekranie, które pomija znacznik przestępności.
Samo przeliczenie w obie strony nie dowodzi dokładności. Dwie funkcje mogą korzystać z tej samej błędnej tabeli, a mimo to doskonale odwracać swoje działanie. Porównanie z niezależnymi oczekiwanymi wartościami jest osobną kontrolą. Wyczerpujące porównanie powinno odnotowywać liczbę porównanych dat, użyte źródło odniesienia i każdą niezgodność.
Kontrole struktury i danych wejściowych
| Kontrola | Oczekiwane zachowanie |
|---|---|
| Przejście z ostatniego dnia miesiąca księżycowego | Pierwszy dzień następnego miesiąca w porządku chronologicznym, z prawidłowym numerem miesiąca, znacznikiem przestępności i rokiem księżycowym |
| Przejście z miesiąca zwykłego do jego miesiąca przestępnego | Powtórzenie numeru miesiąca i zmiana znacznika przestępności na true |
| Przejście z miesiąca przestępnego do następnego miesiąca | Wyzerowanie znacznika przestępności i przejście do kolejnego numeru miesiąca, wraz z wymaganą zmianą roku |
| Żądanie dnia 30 w 29-dniowym przestępnym szóstym miesiącu 2025 r. | Odrzucenie nieistniejącej daty księżycowej |
| Żądanie miesiąca przestępnego w roku, w którym ten miesiąc przestępny nie występuje | Odrzucenie go zamiast zastąpienia miesiącem zwykłym |
| Wprowadzenie 29 lutego 2000 r., a następnie 29 lutego 2100 r. | Przyjęcie pierwszej daty gregoriańskiej i odrzucenie drugiej |
| Wprowadzenie 29 lutego 1500 r. według juliańskiej konwencji Atlasu | Przyjęcie jako prawidłowej daty juliańskiej |
| Przejście o jeden dzień cywilny od 1582-10-04 według konwencji zmiany kalendarza w Atlasie | Osiągnięcie 1582-10-15, dokładnie jeden dzień później |
| Przeliczenie prawidłowej daty na księżycową i z powrotem | Odtworzenie pierwotnej daty bez utraty tożsamości miesiąca przestępnego |
Kalendarz juliański dodaje dzień przestępny co czwarty rok. Reguła gregoriańska wyklucza lata setne, chyba że są podzielne przez 400, dlatego test dnia przestępnego musi określać kalendarz cywilny.
Kontrole odrzucania opisują interfejs ścisłego wprowadzania dat. Biblioteka używana przez program może również oferować udokumentowaną normalizację, na przykład przeniesienie dnia spoza zakresu do następnego miesiąca. Sprawdzaj te zachowania osobno, zamiast mylić wartość znormalizowaną z pierwotnymi danymi wejściowymi.
Kontrole interfejsu
Sprawdzaj zmianę języka, odświeżenie przeglądarki, nawigację między miesiącami i wpis Almanachu niezależnie od funkcji przeliczania. Zmiana języka powinna zachować wybraną datę i wyświetlany miesiąc. Przeglądanie innego miesiąca powinno zachować wybrany dzień, dopóki nie zostanie wybrany nowy. Sprawdź, czy wpis Almanachu otwiera lokalną datę gregoriańską urządzenia i czy stała strona daty zachowuje zapisaną datę cywilną w innej strefie czasowej.
Uwzględnij moment testowy, w którym lokalna data urządzenia różni się od daty odniesienia kalendarza. Pozwala to wykryć błąd polegający na użyciu astronomicznego zegara odniesienia do wyboru daty wpisu Almanachu albo zegara przeglądarki do odtwarzania granic miesięcy księżycowych.
Okresy solarne i granice
Porównanie okresu solarnego wymaga tożsamości okresu, daty cywilnej, godziny, standardu czasu i opublikowanej dokładności. Przed porównaniem sprowadź obie wartości do tego samego kalendarza cywilnego i standardu czasu. Czas opublikowany z dokładnością do minuty nie pozwala ustalić zgodności co do sekundy.
Sprawdzaj przypisaną datę kalendarzową niezależnie od tolerancji znacznika czasu. Różnica mniejsza niż minuta może być dopuszczalna przy zaokrąglonym wyświetlaniu, a jednak umieszczać zdarzenie po niewłaściwej stronie północy. Udokumentuj każdą znaną niepewność dla tej konkretnej granicy, zamiast rozszerzać tolerancję dla wszystkich dat.
Uwzględnij nów i główny okres solarny występujące w tej samej dacie odniesienia. Okres należy do nowego miesiąca kalendarzowego, nawet gdy jego chwila poprzedza koniunkcję. Test oparty wyłącznie na kolejności znaczników czasu zdarzeń może przeoczyć tę różnicę.
W numeracji miesięcy przestępnych uwzględnij sekwencję 2033–2034. Zwykły ósmy miesiąc 2033 r. i pierwszy miesiąc 2034 r. nie zawierają głównego okresu solarnego, a znajdujący się między nimi miesiąc przestępny ma numer jedenaście. Obliczenie traktujące każdy miesiąc bez głównego okresu solarnego jako przestępny nie przejdzie tych kontroli.
Kontrole almanachu i dat historycznych
Klasyfikacje almanachu
Yi oznacza zalecane czynności, a Ji — czynności, których należy unikać. Zgodność nowiu lub daty księżycowej nie potwierdza poprawności tych list. Sprawdź reguły ich odczytu względem wybranej konwencji almanachu lub zbioru danych, a następnie osobno sprawdź angielskie oznaczenia czynności. Wyraźny wynik „brak” również musi pozostać odróżnialny od brakujących danych.
Gdy klasyfikacja almanachu zmienia się przy okresie solarnym, zapisz, czy jej granicą jest początek dnia kalendarzowego tego okresu, czy jego dokładna chwila. Sprawdź obie strony wybranej granicy. Te klasyfikacje miesięczne nie muszą zmieniać się na początku miesiąca księżycowego.
Ganzhi, cykl pni i gałęzi, również wymaga określonej granicy roku. Oznaczenie roku oparte na Chińskim Nowym Roku i oznaczenie oparte na Początku wiosny, czyli Lichun, mogą się różnić w przedziale między tymi granicami. Porównuj każde pole zgodnie z podaną dla niego konwencją.
Przeliczanie historyczne
W przypadku dokumentu historycznego przed wyborem metody przeliczenia ustal jego dynastię lub rok ery, miejscowość, oznaczenie miesiąca, znacznik przestępności i ewentualnie zapisany dzień Ganzhi. Wcześniejsze kalendarze korzystały z innych metod astronomicznych i konwencji czasu. Współczesne obliczenie rozszerzone wstecz może więc różnić się od kalendarza rzeczywiście użytego w zapisie.
Zachowuj transkrypcję, jej interpretację i przeliczoną datę jako osobne pola. Gdy dokument podaje zarówno datę liczbową, jak i dzień Ganzhi, sprawdź ich zgodność, zamiast odrzucać jedną informację, aby dopasować drugą.