Skip to content

Commit fb12dcd

Browse files
committed
Add/Extend tests for ordinal dates
1 parent 3cd02fc commit fb12dcd

1 file changed

Lines changed: 149 additions & 48 deletions

File tree

test/datetime.t.cpp

Lines changed: 149 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -604,51 +604,84 @@ int main (int, char**)
604604
t.is (Datetime ("5/1/2011", "m/d/Y").dayOfYear (), 121, "dayOfYear (5/1/2011) -> 121");
605605
t.is (Datetime ("12/31/2011", "m/d/Y").dayOfYear (), 365, "dayOfYear (12/31/2011) -> 365");
606606

607-
// Relative dates.
608-
Datetime r1 ("today");
609-
t.ok (r1.sameDay (now), "today = now");
610-
611-
Datetime r4 ("sunday");
612-
if (now.dayOfWeek () >= 0)
613-
t.ok (r4.sameDay (now + (0 - now.dayOfWeek () + 7) * 86400), "next sunday");
614-
else
615-
t.ok (r4.sameDay (now + (0 - now.dayOfWeek ()) * 86400), "next sunday");;
616-
617-
Datetime r5 ("monday");
618-
if (now.dayOfWeek () >= 1)
619-
t.ok (r5.sameDay (now + (1 - now.dayOfWeek () + 7) * 86400), "next monday");
620-
else
621-
t.ok (r5.sameDay (now + (1 - now.dayOfWeek ()) * 86400), "next monday");;
622-
623-
Datetime r6 ("tuesday");
624-
if (now.dayOfWeek () >= 2)
625-
t.ok (r6.sameDay (now + (2 - now.dayOfWeek () + 7) * 86400), "next tuesday");
626-
else
627-
t.ok (r6.sameDay (now + (2 - now.dayOfWeek ()) * 86400), "next tuesday");;
628-
629-
Datetime r7 ("wednesday");
630-
if (now.dayOfWeek () >= 3)
631-
t.ok (r7.sameDay (now + (3 - now.dayOfWeek () + 7) * 86400), "next wednesday");
632-
else
633-
t.ok (r7.sameDay (now + (3 - now.dayOfWeek ()) * 86400), "next wednesday");;
634-
635-
Datetime r8 ("thursday");
636-
if (now.dayOfWeek () >= 4)
637-
t.ok (r8.sameDay (now + (4 - now.dayOfWeek () + 7) * 86400), "next thursday");
638-
else
639-
t.ok (r8.sameDay (now + (4 - now.dayOfWeek ()) * 86400), "next thursday");;
640-
641-
Datetime r9 ("friday");
642-
if (now.dayOfWeek () >= 5)
643-
t.ok (r9.sameDay (now + (5 - now.dayOfWeek () + 7) * 86400), "next friday");
644-
else
645-
t.ok (r9.sameDay (now + (5 - now.dayOfWeek ()) * 86400), "next friday");;
646-
647-
Datetime r10 ("saturday");
648-
if (now.dayOfWeek () >= 6)
649-
t.ok (r10.sameDay (now + (6 - now.dayOfWeek () + 7) * 86400), "next saturday");
650-
else
651-
t.ok (r10.sameDay (now + (6 - now.dayOfWeek ()) * 86400), "next saturday");;
607+
// Relative dates - look ahead
608+
{
609+
Datetime::timeRelative = true;
610+
611+
Datetime r1 ("today");
612+
t.ok (r1.sameDay (now), "today = now");
613+
614+
Datetime r4 ("sunday");
615+
if (now.dayOfWeek () >= 0)
616+
t.ok (r4.sameDay (now + (0 - now.dayOfWeek () + 7) * 86400), "next sunday");
617+
else
618+
t.ok (r4.sameDay (now + (0 - now.dayOfWeek ()) * 86400), "next sunday");;
619+
620+
Datetime r5 ("monday");
621+
if (now.dayOfWeek () >= 1)
622+
t.ok (r5.sameDay (now + (1 - now.dayOfWeek () + 7) * 86400), "next monday");
623+
else
624+
t.ok (r5.sameDay (now + (1 - now.dayOfWeek ()) * 86400), "next monday");;
625+
626+
Datetime r6 ("tuesday");
627+
if (now.dayOfWeek () >= 2)
628+
t.ok (r6.sameDay (now + (2 - now.dayOfWeek () + 7) * 86400), "next tuesday");
629+
else
630+
t.ok (r6.sameDay (now + (2 - now.dayOfWeek ()) * 86400), "next tuesday");;
631+
632+
Datetime r7 ("wednesday");
633+
if (now.dayOfWeek () >= 3)
634+
t.ok (r7.sameDay (now + (3 - now.dayOfWeek () + 7) * 86400), "next wednesday");
635+
else
636+
t.ok (r7.sameDay (now + (3 - now.dayOfWeek ()) * 86400), "next wednesday");;
637+
638+
Datetime r8 ("thursday");
639+
if (now.dayOfWeek () >= 4)
640+
t.ok (r8.sameDay (now + (4 - now.dayOfWeek () + 7) * 86400), "next thursday");
641+
else
642+
t.ok (r8.sameDay (now + (4 - now.dayOfWeek ()) * 86400), "next thursday");;
643+
644+
Datetime r9 ("friday");
645+
if (now.dayOfWeek () >= 5)
646+
t.ok (r9.sameDay (now + (5 - now.dayOfWeek () + 7) * 86400), "next friday");
647+
else
648+
t.ok (r9.sameDay (now + (5 - now.dayOfWeek ()) * 86400), "next friday");;
649+
650+
Datetime r10 ("saturday");
651+
if (now.dayOfWeek () >= 6)
652+
t.ok (r10.sameDay (now + (6 - now.dayOfWeek () + 7) * 86400), "next saturday");
653+
else
654+
t.ok (r10.sameDay (now + (6 - now.dayOfWeek ()) * 86400), "next saturday");;
655+
}
656+
657+
// Relative dates - look back
658+
{
659+
Datetime::timeRelative = false;
660+
661+
Datetime r1 ("today");
662+
t.ok (r1.sameDay (now), "today = now");
663+
664+
Datetime r4 ("sunday");
665+
t.ok (r4.sameDay (now + (0 - now.dayOfWeek ()) * 86400), "previous sunday");
666+
667+
Datetime r5 ("monday");
668+
t.ok (r5.sameDay (now + (1 - now.dayOfWeek ()) * 86400), "previous monday");
669+
670+
Datetime r6 ("tuesday");
671+
t.ok (r6.sameDay (now + (2 - now.dayOfWeek ()) * 86400), "previous tuesday");
672+
673+
Datetime r7 ("wednesday");
674+
t.ok (r7.sameDay (now + (3 - now.dayOfWeek ()) * 86400), "previous wednesday");
675+
676+
Datetime r8 ("thursday");
677+
t.ok (r8.sameDay (now + (4 - now.dayOfWeek ()) * 86400), "previous thursday");
678+
679+
Datetime r9 ("friday");
680+
t.ok (r9.sameDay (now + (5 - now.dayOfWeek ()) * 86400), "previous friday");
681+
682+
Datetime r10 ("saturday");
683+
t.ok (r10.sameDay (now + (6 - now.dayOfWeek ()) * 86400), "previous saturday");
684+
}
652685

653686
Datetime r11 ("eow");
654687
t.ok (r11 < now + (8 * 86400), "eow < 7 days away");
@@ -686,9 +719,77 @@ int main (int, char**)
686719
Datetime r19d ("eoq");
687720
t.ok (r19d > now, "eoq > now");
688721

689-
Datetime first ("1st");
690-
t.notok (first.sameMonth (now), "1st not in same month as now");
691-
t.is (first.day (), 1, "1st day is 1");
722+
{
723+
Datetime::timeRelative = true;
724+
725+
Datetime first ("1st");
726+
std::cout << "actual (first - relative:true): " << first.toISO () << " now: " << now.toISO () << std::endl;
727+
if (now.day () >= 1)
728+
t.notok (first.sameMonth (now), "1st not in same month as now");
729+
else
730+
t.ok (first.sameMonth (now), "1st in same month as now");
731+
t.is (first.day(), 1, "1st day is 1");
732+
733+
Datetime second ("2nd");
734+
std::cout << "actual (second - relative:true): " << second.toISO () << " now: " << now.toISO () << std::endl;
735+
if (now.day () >= 2)
736+
t.notok (second.sameMonth (now), "2nd not in same month as now");
737+
else
738+
t.ok (second.sameMonth (now), "2nd in same month as now");
739+
t.is (second.day(), 2, "2nd day is 2");
740+
741+
Datetime third ("3rd");
742+
std::cout << "actual (third - relative:true): " << third.toISO () << " now: " << now.toISO () << std::endl;
743+
if (now.day () >= 3)
744+
t.notok (third.sameMonth (now), "3rd not in same month as now");
745+
else
746+
t.ok (third.sameMonth (now), "3rd in same month as now");
747+
t.is (third.day(), 3, "3rd day is 3");
748+
749+
Datetime fourth ("4th");
750+
std::cout << "actual (fourth - relative:true): " << fourth.toISO () << " now: " << now.toISO () << std::endl;
751+
if (now.day () >= 4)
752+
t.notok (fourth.sameMonth (now), "4th not in same month as now");
753+
else
754+
t.ok (fourth.sameMonth (now), "4th not in same month as now");
755+
t.is (fourth.day(), 4, "4th day is 4");
756+
}
757+
758+
{
759+
Datetime::timeRelative = false;
760+
761+
Datetime first ("1st");
762+
std::cout << "actual (first - relative:false): " << first.toISO () << " now: " << now.toISO () << std::endl;
763+
if (now.day () >= 1)
764+
t.ok (first.month() == now.month(), "1st in same month as now");
765+
else
766+
t.ok ((first.month() - now.month() - 12) % 12 == -1, "1st in previous month");
767+
t.is (first.day (), 1, "1st day is 1");
768+
769+
Datetime second ("2nd");
770+
std::cout << "actual (second - relative:false): " << second.toISO () << " now: " << now.toISO () << std::endl;
771+
if (now.day () >= 2)
772+
t.ok (second.month() == now.month(), "2nd in same month as now");
773+
else
774+
t.ok ((second.month() - now.month() - 12) % 12 == -1, "2nd in previous month");
775+
t.is (second.day(), 2, "2nd day is 2");
776+
777+
Datetime third ("3rd");
778+
std::cout << "actual (third - relative:false): " << third.toISO () << " now: " << now.toISO () << std::endl;
779+
if (now.day () >= 3)
780+
t.ok (third.month() == now.month(), "3rd in same month as now");
781+
else
782+
t.ok ((third.month() - now.month() - 12) % 12 == -1, "3rd in previous month");
783+
t.is (third.day(), 3, "3rd day is 3");
784+
785+
Datetime fourth ("4th");
786+
std::cout << "actual (fourth - relative:false): " << fourth.toISO () << " now: " << now.toISO () << std::endl;
787+
if (now.day () >= 4)
788+
t.ok (fourth.month() == now.month(), "4th in same month as now");
789+
else
790+
t.ok ((fourth.month() - now.month() - 12) % 12 == -1, "4th in previous month");
791+
t.is (fourth.day(), 4, "4th day is 4");
792+
}
692793

693794
Datetime later ("later");
694795
t.is (later.month (), 1, "later -> m = 1");

0 commit comments

Comments
 (0)