aboutsummaryrefslogtreecommitdiff
path: root/tests/datetime.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/datetime.scm')
-rw-r--r--tests/datetime.scm124
1 files changed, 124 insertions, 0 deletions
diff --git a/tests/datetime.scm b/tests/datetime.scm
new file mode 100644
index 00000000..b678edad
--- /dev/null
+++ b/tests/datetime.scm
@@ -0,0 +1,124 @@
+(((datetime) date+ date-
+ time+ time-
+ year month day
+ date time
+ datetime
+ datetime+
+ datetime<=?
+ datetime-difference
+ leap-year?
+ )
+ ((ice-9 format) format)
+ )
+
+(test-equal "empty time"
+ (time) #00:00:00)
+
+(test-assert "Synatx date"
+ #2020-01-01)
+
+(test-assert "Test year type"
+ (integer? (year (date year: 2020))))
+
+(test-assert "Test mmnth type"
+ (integer? (month (date month: 1))))
+
+(test-assert "Test day type"
+ (integer? (day (date day: 1))))
+
+(test-equal "Manual print (any)"
+ "2020-10-10"
+ (let ((d (date year: 2020 month: 10 day: 10)))
+ (format #f "~a-~a-~a"
+ (year d) (month d) (day d))))
+
+(test-equal "Manual print (number)"
+ "2020-10-10"
+ (let ((d (date year: 2020 month: 10 day: 10)))
+ (format #f "~d-~d-~d"
+ (year d) (month d) (day d))))
+
+(test-equal "Date print"
+ "2020-01-01"
+ (format #f "~a" (date year: 2020 month: 1 day: 1)))
+
+(test-equal "Syntax date="
+ (date year: 2020 month: 1 day: 1)
+ #2020-01-01)
+
+(test-equal "Syntax time="
+ (time hour: 13 minute: 37 second: 0)
+ #13:37:00)
+
+(test-equal "Syntax Datetime="
+ (datetime year: 2020 month: 1 day: 1 hour: 13 minute: 37 second: 0)
+ #2020-01-01T13:37:00)
+
+(test-equal #2020-02-28 (date- #2020-03-05 (date day: 6)))
+(test-equal #2020-02-29 (date- #2020-03-05 (date day: 5)))
+(test-equal #2020-03-01 (date- #2020-03-05 (date day: 4)))
+
+(test-equal "date+ day" #2020-10-10 (date+ #2020-10-01 (date day: 9)))
+(test-equal "date+ month" #2020-10-10 (date+ #2020-01-10 (date month: 9)))
+(test-equal "date+ day/month" #2020-10-10 (date+ #2020-01-01 (date day: 9 month: 9)))
+;; (test-equal "date+ year" #4040-10-10 (date+ #2020-10-10 (date year: 2020)))
+
+(test-assert "date+ first literal" (date+ #2020-01-01 (date day: 0)))
+(test-assert "date+ second literal" (date+ (date year: 1 month: 1 day: 1) #0001-00-00))
+(test-assert "date+ both literal" (date+ #2020-01-01 #0000-00-00))
+
+(test-equal "date+ year overflow" #2019-01-01 (date+ #2018-12-31 (date day: 1)))
+(test-equal "date- year overflow" #2018-12-31 (date- #2019-01-01 (date day: 1)))
+
+;; (test-equal "date+ large" #4040-10-10 (date+ #2020-05-03 #2020-05-07))
+
+(test-equal "date- large" #0001-01-01 (date- #2020-01-01 #2019-00-00))
+
+;; Datum är spännande
+(test-equal "date- equal" (date year: -1 month: 11 day: 31)
+ (date- #2020-01-01 #2020-01-01))
+
+(test-equal #2020-01-01T10:00:00 (datetime date: #2020-01-01
+ time: #10:00:00))
+(test-equal #2020-01-01T10:00:00
+ (datetime+ (datetime date: #2020-01-01)
+ (datetime time: #10:00:00)))
+
+
+(test-equal #2020-03-10
+ (date+ #2020-03-01
+ (date day: 4)
+ (date day: 5)))
+
+
+(test-equal "time- self"
+ #00:00:00
+ (time- #10:20:30 #10:20:30))
+
+(test-equal "datetime-difference self"
+ #0000-00-00T00:00:00
+ (datetime-difference (datetime date: #2020-01-01) (datetime date: #2020-01-01)))
+
+;; (test-assert
+;; (datetime- #2018-01-17T10:00:00
+;; #2018-01-17T08:00:00))
+
+
+;; (test-assert
+;; (datetime<=? (datetime time: (time hour: 24))
+;; (datetime- #2018-01-17T10:00:00
+;; #2018-01-17T08:00:00)))
+
+
+;; TODO
+;; at the time of writing this returns #2020-02-00
+;; The general question is, how is the last in a month handled?
+;; (test-equal
+;; (date+ #2019-12-31 (date month: 1)))
+
+(test-assert (leap-year? 2020))
+
+(test-equal "Add to Leap day"
+ #2020-02-29 (date+ #2020-02-28 (date day: 1)))
+
+