#lang racket (require rackunit/text-ui racket/date) (require rackunit "../date-utils.rkt") (define test-date-utils (test-suite "test-date-utils" (test-case "test-add-day" (define result-date1 (add-day (seconds->date (find-seconds 0 0 10 29 2 2012)) 1)) (check-equal? (date-day result-date1) 1) (check-equal? (date-month result-date1) 3) (check-equal? (date-year result-date1) 2012) (define result-date2 (add-day (seconds->date (find-seconds 0 0 10 1 3 2012)) -1)) (check-equal? (date-day result-date2) 29) (check-equal? (date-month result-date2) 2) (check-equal? (date-year result-date2) 2012) (define result-date3 (add-day (seconds->date (find-seconds 0 0 10 1 1 2012)) -1)) (check-equal? (date-day result-date3) 31) (check-equal? (date-month result-date3) 12) (check-equal? (date-year result-date3) 2011) (define result-date4 (add-day (seconds->date (find-seconds 0 0 10 31 12 2011)) 1)) (check-equal? (date-day result-date4) 1) (check-equal? (date-month result-date4) 1) (check-equal? (date-year result-date4) 2012) (define result-date5 (add-day (seconds->date (find-seconds 0 0 10 27 2 2012)) 3)) (check-equal? (date-day result-date5) 1) (check-equal? (date-month result-date5) 3) (check-equal? (date-year result-date5) 2012) (define result-date6 (add-day (seconds->date (find-seconds 0 0 10 2 3 2012)) -2)) (check-equal? (date-day result-date6) 29) (check-equal? (date-month result-date6) 2) (check-equal? (date-year result-date6) 2012)) (test-case "test-add1-month & sub1-month" (define result-date1 (add1-month (seconds->date (find-seconds 0 0 10 1 2 2012)))) (check-equal? (date-day result-date1) 1) (check-equal? (date-month result-date1) 3) (check-equal? (date-year result-date1) 2012) (define result-date2 (sub1-month (seconds->date (find-seconds 0 0 10 1 2 2012)))) (check-equal? (date-day result-date2) 1) (check-equal? (date-month result-date2) 1) (check-equal? (date-year result-date2) 2012) (define result-date3 (sub1-month (seconds->date (find-seconds 0 0 10 1 1 2012)))) (check-equal? (date-day result-date3) 1) (check-equal? (date-month result-date3) 12) (check-equal? (date-year result-date3) 2011) (define result-date4 (sub1-month (seconds->date (find-seconds 0 0 10 1 1 2012)))) (check-equal? (date-day result-date4) 1) (check-equal? (date-month result-date4) 12) (check-equal? (date-year result-date4) 2011) (define result-date5 (sub1-month (seconds->date (find-seconds 0 0 10 31 3 2012)))) (check-equal? (date-day result-date5) 29) (check-equal? (date-month result-date5) 2) (check-equal? (date-year result-date5) 2012) (define result-date6 (sub1-month (seconds->date (find-seconds 0 0 10 31 3 2012)) #:align 'up)) (check-equal? (date-day result-date6) 1) (check-equal? (date-month result-date6) 3) (check-equal? (date-year result-date6) 2012)) (test-case "test-add-year" (define result-date1 (add-year (seconds->date (find-seconds 0 0 10 1 2 2012)) 1)) (check-equal? (date-day result-date1) 1) (check-equal? (date-month result-date1) 2) (check-equal? (date-year result-date1) 2013) (define result-date2 (add-year (seconds->date (find-seconds 0 0 10 29 2 2012)) 1)) (check-equal? (date-day result-date2) 28) (check-equal? (date-month result-date2) 2) (check-equal? (date-year result-date2) 2013) (define result-date3 (add-year (seconds->date (find-seconds 0 0 10 29 2 2012)) 1 #:align 'up)) (check-equal? (date-day result-date3) 1) (check-equal? (date-month result-date3) 3) (check-equal? (date-year result-date3) 2013) (define result-date4 (add-year (seconds->date (find-seconds 0 0 10 29 2 2012)) 10 #:align 'up)) (check-equal? (date-day result-date4) 1) (check-equal? (date-month result-date4) 3) (check-equal? (date-year result-date4) 2022)) )) (run-tests test-date-utils)