aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/datetime/timespec.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2023-10-02 19:26:40 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2023-10-02 19:28:44 +0200
commit712654d4c023a2ab13190c6905d313e0ba897965 (patch)
treeb8505b420d6621022fa6a46271340071d8881322 /tests/unit/datetime/timespec.scm
parentMade displayln into a library export. (diff)
downloadcalp-712654d4c023a2ab13190c6905d313e0ba897965.tar.gz
calp-712654d4c023a2ab13190c6905d313e0ba897965.tar.xz
Rewrite test running system.
Diffstat (limited to 'tests/unit/datetime/timespec.scm')
-rw-r--r--tests/unit/datetime/timespec.scm98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/unit/datetime/timespec.scm b/tests/unit/datetime/timespec.scm
new file mode 100644
index 00000000..76fdd572
--- /dev/null
+++ b/tests/unit/datetime/timespec.scm
@@ -0,0 +1,98 @@
+(define-module (test timespec)
+ :use-module (srfi srfi-64)
+ :use-module (srfi srfi-88)
+ :use-module (datetime)
+ :use-module (datetime timespec))
+
+(test-equal "The empty string parses to the empty timespec"
+ (timespec-zero) (parse-time-spec ""))
+
+(test-group "timespec-add"
+
+ (test-equal "Zero operands gives 0"
+ (timespec-zero) (timespec-add))
+
+ (let ((ts (make-timespec (time hour: 10 minute: 20 second: 30) '- #\z)))
+ (test-equal "Single operand gives that operand"
+ ts (timespec-add ts)))
+
+ (test-equal "0 + 0 = 0"
+ (timespec-zero) (timespec-add (timespec-zero) (timespec-zero)))
+
+ (test-group
+ "+ -"
+ (test-equal "Remove a number less than the base"
+ (make-timespec (time hour: 10 minute: 00 second: 00) '+ #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30)
+ '+ #\w)
+ (make-timespec (time minute: 20 second: 30)
+ '- #\w)))
+
+ (test-equal "Remove a number greater than the base"
+ (make-timespec (time hour: 01 minute: 00 second: 00) '- #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 00 second: 00) '+ #\w)
+ (make-timespec (time hour: 11 minute: 00 second: 00) '- #\w)))
+
+ (test-equal "x + -x = 0"
+ (timespec-zero) (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30) '+ #\w)
+ (make-timespec (time hour: 10 minute: 20 second: 30) '- #\w))))
+
+ (test-group "- +"
+ (test-equal "Add a number less than the (negative) base"
+ (make-timespec (time hour: 10 minute: 00 second: 00) '+ #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30) '- #\w)
+ (make-timespec (time hour: 00 minute: 20 second: 30) '+ #\w)))
+
+ (test-equal "Add a number greater than the (negative) base"
+ (make-timespec (time hour: 01 minute: 00 second: 00) '- #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 00 second: 00) '- #\w)
+ (make-timespec (time hour: 11 minute: 00 second: 00) '+ #\w)))
+
+ (test-equal "-x + x = 0"
+ (timespec-zero) (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30) '- #\w)
+ (make-timespec (time hour: 10 minute: 20 second: 30) '+ #\w))))
+
+ (test-group "+ +"
+ (test-equal "x + x = 2x"
+ (make-timespec (time hour: 20 minute: 41 second: 00) '+ #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30) '+ #\w)
+ (make-timespec (time hour: 10 minute: 20 second: 30) '+ #\w))))
+
+ (test-group "- -"
+ (test-equal "-x + -x = -2x"
+ (make-timespec (time hour: 20 minute: 41 second: 00) '- #\w)
+ (timespec-add (make-timespec (time hour: 10 minute: 20 second: 30) '- #\w)
+ (make-timespec (time hour: 10 minute: 20 second: 30) '- #\w))))
+
+ ;; add more than two timespecs
+
+ ;; add timespecs of differing types
+ )
+
+(test-group "parse-time-spec"
+ ;; TODO what even is this case?
+ (test-equal (make-timespec (time) '+ #\g) (parse-time-spec "-g"))
+
+ (test-equal "Parse direct date, with hour minute and second"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '+ #\w)
+ (parse-time-spec "20:00:00"))
+ (test-equal "Parse direct date, with hour and minute"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '+ #\w)
+ (parse-time-spec "20:00"))
+ (test-equal "Parse direct date, with just hour"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '+ #\w)
+ (parse-time-spec "20"))
+
+ (test-equal "Parse timespec with letter at end"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '+ #\g)
+ (parse-time-spec "20:00g"))
+
+ (test-equal "Parse negative timespec"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '- #\w)
+ (parse-time-spec "-20"))
+
+ (test-equal "Parse negative timespec with letter at end"
+ (make-timespec (time hour: 20 minute: 00 second: 00) '- #\z)
+ (parse-time-spec "-20z")))
+
+'((datetime timespec))