Add tests for time deltas
[8sync.git] / tests.scm
index 84bf8f35b32e3f1ae0b69e266622e09d1bdad3b4..c9999c6a45a784fc310fe4e9199183f2a5a35be5 100644 (file)
--- a/tests.scm
+++ b/tests.scm
 (test-assert (not (time-< '(7 . 8) '(7 . 2))))
 (test-assert (not (time-< '(8 . 2) '(7 . 2))))
 
+(let ((tdelta (make-time-delta 8)))
+  (test-assert (time-delta? tdelta))
+  (test-eqv (time-delta-sec tdelta) 8)
+  (test-eqv (time-delta-usec tdelta) 0)
+  (test-equal
+      (time-+ '(2 . 3) tdelta)
+    '(10 . 3)))
+
+(let ((tdelta (make-time-delta 10 1)))
+  (test-assert (time-delta? tdelta))
+  (test-eqv (time-delta-sec tdelta) 10)
+  (test-eqv (time-delta-usec tdelta) 1)
+  (test-equal
+      (time-+ '(2 . 3) tdelta)
+    '(12 . 4)))
+
 
 \f
 ;;; Schedule tests
 
 ;; ... whew!
 
+;; Run/wrap request stuff
+;; ----------------------
+
+(let ((wrapped (wrap (+ 1 2))))
+  (test-assert (procedure? wrapped))
+  (test-equal (wrapped) 3))
+
+(let ((run-two-squared (run (lambda () (* 2 2)))))
+  (test-assert (run-request? run-two-squared))
+  (test-assert (procedure? (run-request-proc run-two-squared)))
+  (test-equal ((run-request-proc run-two-squared)) 4)
+  (test-eq (run-request-when run-two-squared) #f))
+
+(let ((run-two-squared (run (lambda () (* 2 2)) '(88 . 0))))
+  (test-assert (run-request? run-two-squared))
+  (test-assert (procedure? (run-request-proc run-two-squared)))
+  (test-equal ((run-request-proc run-two-squared)) 4)
+  (test-equal (run-request-when run-two-squared) '(88 . 0)))
+
+(let ((run-two-squared (run-wrap (* 2 2))))
+  (test-assert (run-request? run-two-squared))
+  (test-assert (procedure? (run-request-proc run-two-squared)))
+  (test-equal ((run-request-proc run-two-squared)) 4)
+  (test-eq (run-request-when run-two-squared) #f))
+
+(let ((run-two-squared (run-wrap-at (* 2 2) '(88 . 0))))
+  (test-assert (run-request? run-two-squared))
+  (test-assert (procedure? (run-request-proc run-two-squared)))
+  (test-equal ((run-request-proc run-two-squared)) 4)
+  (test-equal (run-request-when run-two-squared) '(88 . 0)))
+
+
+;;; Agenda tests
+;;; ------------
+
+;; helpers
+
+(define (speak-it)
+  (let ((messages '()))
+    (lambda* (#:optional message)
+      (if message (set! messages (append messages (list message))))
+      messages)))
+
+;; the dummy test
+
+(define speaker (speak-it))
+
+(define (dummy-func)
+  (speaker "I'm a dummy\n"))
+
+(define (run-dummy)
+  (speaker "I bet I can make you say you're a dummy!\n")
+  (run dummy-func))
+
+(let ((q (make-q)))
+  (set! speaker (speak-it))  ; reset the speaker
+  (enq! q run-dummy)
+  (start-agenda (make-agenda #:queue q)
+                (true-after-n-times 2))
+  (test-equal (speaker)
+    '("I bet I can make you say you're a dummy!\n"
+      "I'm a dummy\n")))
+
+;; should only do the first one after one round though
+(let ((q (make-q)))
+  (set! speaker (speak-it))  ; reset the speaker
+  (enq! q run-dummy)
+  (start-agenda (make-agenda #:queue q)
+                (true-after-n-times 1))
+  (test-equal (speaker)
+    '("I bet I can make you say you're a dummy!\n")))
+
+
 ;; End tests
 
 (test-end "tests")