first delimited continuation test
[8sync.git] / tests.scm
index a958ea247bd8ff0d4c2fa6203ec1fab51d35c536..d56b4f2af73dbaddbf33584e75f3f09e043b0db2 100644 (file)
--- a/tests.scm
+++ b/tests.scm
@@ -6,7 +6,7 @@
   #:use-module (srfi srfi-64)
   #:use-module (ice-9 q)
   #:use-module (ice-9 receive)
-  #:use-module (loopy agenda))
+  #:use-module (eightsync agenda))
 
 (test-begin "tests")
 
 ;; Timer tests
 ;; ===========
 
-(test-assert (time-= '(1 . 1) '(1 . 1)))
-(test-assert (not (time-= '(1 . 1) '(1 . 0))))
-(test-assert (not (time-= '(0 . 1) '(1 . 1))))
+(test-assert (time= '(1 . 1) '(1 . 1)))
+(test-assert (not (time= '(1 . 1) '(1 . 0))))
+(test-assert (not (time= '(0 . 1) '(1 . 1))))
 
-(test-assert (time-< '(1 . 1) '(1 . 2)))
-(test-assert (time-< '(7 . 2) '(8 . 2)))
-(test-assert (not (time-< '(7 . 2) '(7 . 2))))
-(test-assert (not (time-< '(7 . 8) '(7 . 2))))
-(test-assert (not (time-< '(8 . 2) '(7 . 2))))
+(test-assert (time< '(1 . 1) '(1 . 2)))
+(test-assert (time< '(7 . 2) '(8 . 2)))
+(test-assert (not (time< '(7 . 2) '(7 . 2))))
+(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)
+      (time-delta+ '(2 . 3) tdelta)
     '(10 . 3)))
 
 (let ((tdelta (make-time-delta 10 1)))
@@ -37,7 +37,7 @@
   (test-eqv (time-delta-sec tdelta) 10)
   (test-eqv (time-delta-usec tdelta) 1)
   (test-equal
-      (time-+ '(2 . 3) tdelta)
+      (time-delta+ '(2 . 3) tdelta)
     '(12 . 4)))
 
 
   (test-assert (procedure? wrapped))
   (test-equal (wrapped) 3))
 
-(let ((run-two-squared (run (lambda () (* 2 2)))))
+(let ((run-two-squared (run-it (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))))
+(let ((run-two-squared (run-it (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))))
+(let ((run-two-squared (run (* 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))))
+(let ((run-two-squared (run-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)
 
 (define (run-dummy)
   (speaker "I bet I can make you say you're a dummy!\n")
-  (run dummy-func))
+  (run-it dummy-func))
 
 (let ((q (make-q)))
   (set! speaker (speak-it))  ; reset the speaker
   (test-equal (speaker)
     '("I bet I can make you say you're a dummy!\n")))
 
+;; delimited continuation tests
+
+(define (return-monkey)
+  (speaker "(Hint, it's a monkey...)\n")
+  'monkey)
+
+(define (talk-about-the-zoo)
+  (speaker "Today I went to the zoo and I saw...\n")
+  (speaker
+   (string-concatenate
+    `("A " ,(symbol->string (%sync (%run (return-monkey)))) "!\n"))))
+
+(let ((q (make-q)))
+  (set! speaker (speak-it))
+  (enq! q talk-about-the-zoo)
+  ;; (enq! q talk-about-the-zoo-but-wait)
+  (start-agenda (make-agenda #:queue q)
+                #:stop-condition (true-after-n-times 10))
+  (test-equal (speaker)
+              '("Today I went to the zoo and I saw...\n"
+                "(Hint, it's a monkey...)\n"
+                "A monkey!\n")))
+
 ;; End tests
 
 (test-end "tests")