aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-06-12 22:45:30 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2022-06-12 22:45:30 +0200
commit92612e6d76d1f467e6961efeeb194fef2b32522c (patch)
tree1a448668aafdde97e188d404b6bddae865661ccd
parentAdd LIMIT flag to make check. (diff)
downloadcalp-92612e6d76d1f467e6961efeeb194fef2b32522c.tar.gz
calp-92612e6d76d1f467e6961efeeb194fef2b32522c.tar.xz
Add timespec tests.
-rw-r--r--tests/test/timespec.scm88
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/test/timespec.scm b/tests/test/timespec.scm
new file mode 100644
index 00000000..256c01bf
--- /dev/null
+++ b/tests/test/timespec.scm
@@ -0,0 +1,88 @@
+(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 #10:20: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 #10:00:00 '+ #\w)
+ (timespec-add (make-timespec #10:20:30 '+ #\w)
+ (make-timespec #00:20:30 '- #\w)))
+
+ (test-equal "Remove a number greater than the base"
+ (make-timespec #01:00:00 '- #\w)
+ (timespec-add (make-timespec #10:00:00 '+ #\w)
+ (make-timespec #11:00:00 '- #\w)))
+
+ (test-equal "x + -x = 0"
+ (timespec-zero) (timespec-add (make-timespec #10:20:30 '+ #\w)
+ (make-timespec #10:20:30 '- #\w))))
+
+ (test-group "- +"
+ (test-equal "Add a number less than the (negative) base"
+ (make-timespec #10:00:00 '+ #\w)
+ (timespec-add (make-timespec #10:20:30 '- #\w)
+ (make-timespec #00:20:30 '+ #\w)))
+
+ (test-equal "Add a number greater than the (negative) base"
+ (make-timespec #01:00:00 '- #\w)
+ (timespec-add (make-timespec #10:00:00 '- #\w)
+ (make-timespec #11:00:00 '+ #\w)))
+
+ (test-equal "-x + x = 0"
+ (timespec-zero) (timespec-add (make-timespec #10:20:30 '- #\w)
+ (make-timespec #10:20:30 '+ #\w))))
+
+ (test-group "+ +"
+ (test-equal "x + x = 2x"
+ (make-timespec #20:41:00 '+ #\w)
+ (timespec-add (make-timespec #10:20:30 '+ #\w)
+ (make-timespec #10:20:30 '+ #\w))))
+
+ (test-group "- -"
+ (test-equal "-x + -x = -2x"
+ (make-timespec #20:41:00 '- #\w)
+ (timespec-add (make-timespec #10:20:30 '- #\w)
+ (make-timespec #10:20: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 #20:00:00 '+ #\w) (parse-time-spec "20:00:00"))
+ (test-equal "Parse direct date, with hour and minute"
+ (make-timespec #20:00:00 '+ #\w) (parse-time-spec "20:00"))
+ (test-equal "Parse direct date, with just hour"
+ (make-timespec #20:00:00 '+ #\w) (parse-time-spec "20"))
+
+ (test-equal "Parse timespec with letter at end"
+ (make-timespec #20:00:00 '+ #\g) (parse-time-spec "20:00g"))
+
+ (test-equal "Parse negative timespec"
+ (make-timespec #20:00:00 '- #\w) (parse-time-spec "-20"))
+
+ (test-equal "Parse negative timespec with letter at end"
+ (make-timespec #20:00:00 '- #\z) (parse-time-spec "-20z")))