(define-module (tests test-core)
#:use-module (srfi srfi-64)
#:use-module (ice-9 q)
+ #:use-module (ice-9 receive)
#:use-module (loopy agenda))
(test-begin "tests")
;;; ==============
;; helpers
+(define (assert-times-expected time-segments expected-times)
+ (test-equal (map time-segment-time time-segments)
+ expected-times))
+
(define a-proc (const 'a))
(define b-proc (const 'b))
(define c-proc (const 'c))
+(define d-proc (const 'd))
+(define e-proc (const 'e))
+(define f-proc (const 'f))
(define sched (make-schedule))
(test-assert (schedule-empty? sched))
a-proc)
(test-eq (q-rear (time-segment-queue (car (schedule-segments sched))))
a-proc)
+(test-eq ((q-front (time-segment-queue (car (schedule-segments sched)))))
+ 'a) ;; why not
+(assert-times-expected (schedule-segments sched)
+ '((10 . 0)))
;; Add another segment at (10 . 0)
(schedule-add! '(10 . 0) b-proc sched)
a-proc)
(test-eq (q-rear (time-segment-queue (car (schedule-segments sched))))
b-proc)
+(assert-times-expected (schedule-segments sched)
+ '((10 . 0)))
;; Add a segment to (11 . 0), (8 . 1) and (10 . 10)
-(schedule-add! 11 a-proc sched)
-(schedule-add! '(8 . 1) c-proc sched)
-(schedule-add! '(10 . 10) c-proc sched)
+(schedule-add! 11 c-proc sched)
+(schedule-add! '(8 . 1) d-proc sched)
+(schedule-add! '(10 . 10) e-proc sched)
(test-assert (not (schedule-empty? sched)))
(test-equal (length (schedule-segments sched)) 4)
-(test-equal (time-segment-time (car (schedule-segments sched)))
- '(8 . 1))
-(test-equal (time-segment-time (cadr (schedule-segments sched)))
- '(10 . 0))
-(test-equal (time-segment-time (caddr (schedule-segments sched)))
- '(10 . 10))
-(test-equal (time-segment-time (cadddr (schedule-segments sched)))
- '(11 . 0))
-
+(assert-times-expected (schedule-segments sched)
+ '((8 . 1) (10 . 0) (10 . 10) (11 . 0)))
+
+;; Splitting
+(define (test-split-at schedule time expected-before expected-after)
+ (receive (segments-before segments-after)
+ (schedule-segments-split schedule time)
+ (assert-times-expected segments-before expected-before)
+ (assert-times-expected segments-after expected-after)))
+
+(test-split-at sched 0
+ '()
+ '((8 . 1) (10 . 0) (10 . 10) (11 . 0)))
+(test-split-at sched '(8 . 0)
+ '()
+ '((8 . 1) (10 . 0) (10 . 10) (11 . 0)))
+(test-split-at sched '(8 . 1)
+ '((8 . 1))
+ '((10 . 0) (10 . 10) (11 . 0)))
+(test-split-at sched 9
+ '((8 . 1))
+ '((10 . 0) (10 . 10) (11 . 0)))
+(test-split-at sched 10
+ '((8 . 1) (10 . 0))
+ '((10 . 10) (11 . 0)))
+(test-split-at sched 9000
+ '((8 . 1) (10 . 0) (10 . 10) (11 . 0))
+ '())
+(test-split-at sched '(9000 . 1) ; over nine thousaaaaaaand
+ '((8 . 1) (10 . 0) (10 . 10) (11 . 0))
+ '())
;; End tests