X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tests.scm;h=c9999c6a45a784fc310fe4e9199183f2a5a35be5;hb=8153aa3f58eba2b8bc0118d224d7e74d7b434074;hp=228f39febd19cf9c656fb9db99bbf35d758fb0f2;hpb=ed9a7d9fb659766e1c7e719ac899a83809527746;p=8sync.git diff --git a/tests.scm b/tests.scm index 228f39f..c9999c6 100644 --- a/tests.scm +++ b/tests.scm @@ -24,6 +24,22 @@ (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))) + ;;; Schedule tests @@ -119,6 +135,110 @@ (schedule-extract-until! sched 10)) (assert-times-expected some-extracted '((8 . 1) (10 . 0))) (assert-times-expected (schedule-segments sched) '((10 . 10) (11 . 0))) +(define first-extracted-queue + (time-segment-queue (car some-extracted))) +(define second-extracted-queue + (time-segment-queue (cadr some-extracted))) +(test-assert (not (q-empty? first-extracted-queue))) +(test-equal ((deq! first-extracted-queue)) 'd) +(test-assert (q-empty? first-extracted-queue)) + +(test-assert (not (q-empty? second-extracted-queue))) +(test-equal ((deq! second-extracted-queue)) 'a) +(test-equal ((deq! second-extracted-queue)) 'b) +(test-assert (q-empty? second-extracted-queue)) + +;; Add one more and test flattening to a queue +(test-assert (not (schedule-empty? sched))) +(schedule-add! '(10 . 10) f-proc sched) +(define remaining-segments + (schedule-extract-until! sched '(9000 . 1))) +(test-assert (schedule-empty? sched)) +(define some-queue (make-q)) +(enq! some-queue (const 'ho-ho)) +(enq! some-queue (const 'ha-ha)) +(add-segments-contents-to-queue! remaining-segments some-queue) +(test-assert (not (q-empty? some-queue))) +(test-equal 'ho-ho ((deq! some-queue))) +(test-equal 'ha-ha ((deq! some-queue))) +(test-equal 'e ((deq! some-queue))) +(test-equal 'f ((deq! some-queue))) +(test-equal 'c ((deq! some-queue))) +(test-assert (q-empty? some-queue)) + +;; ... 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