#lang racket/base
(require racket/sequence
(planet neil/overeasy)
"rackonsole-ringbuf.rkt")
(test-section 'rackonsole-ringbuf
(test-section 'size-0
(test #:id 'error-append-to-ringbuf-size-0
#:code (let ((rb (%rackonsole:ringbuf/size 0)))
(%rackonsole:ringbuf-append! rb 'a))
#:exn "%rackonsole:ringbuf-append!: cannot append to ringbuf size 0")
(test #:id 'error-prepend-to-ringbuf-size-0
#:code (let ((rb (%rackonsole:ringbuf/size 0)))
(%rackonsole:ringbuf-prepend! rb 'a))
#:exn "%rackonsole:ringbuf-prepend!: cannot prepend to ringbuf size 0"))
(test-section 'size-1
(let ((rb (%rackonsole:ringbuf/size 1)))
(test 'start
(sequence->list rb)
'())
(test 'append-a
(begin (%rackonsole:ringbuf-append! rb 'a)
(sequence->list rb))
'(a))
(test 'append-b
(begin (%rackonsole:ringbuf-append! rb 'b)
(sequence->list rb))
'(b))
(test 'append-c
(begin (%rackonsole:ringbuf-append! rb 'c)
(sequence->list rb))
'(c))
(test 'prepend-d
(begin (%rackonsole:ringbuf-prepend! rb 'd)
(sequence->list rb))
'(d))
(test 'prepend-e
(begin (%rackonsole:ringbuf-prepend! rb 'e)
(sequence->list rb))
'(e))
(test 'prepend-f
(begin (%rackonsole:ringbuf-prepend! rb 'f)
(sequence->list rb))
'(f))))
(test-section 'append
(for ((start (in-range 0 5)))
(test-section (string->symbol (format "start-~A" start))
(let ((rb (%rackonsole:ringbuf/size/start 5 start)))
(test 'start
(sequence->list rb)
'())
(%rackonsole:ringbuf-append! rb 'a)
(test 'after-a
(sequence->list rb)
'(a))
(%rackonsole:ringbuf-append! rb 'b)
(test 'after-b
(sequence->list rb)
'(a b))
(%rackonsole:ringbuf-append! rb 'c)
(test 'after-c
(sequence->list rb)
'(a b c))
(%rackonsole:ringbuf-append! rb 'd)
(test 'after-d
(sequence->list rb)
'(a b c d))
(%rackonsole:ringbuf-append! rb 'e)
(test 'after-e
(sequence->list rb)
'(a b c d e))
(%rackonsole:ringbuf-append! rb 'f)
(test 'after-f
(sequence->list rb)
'(b c d e f))
(%rackonsole:ringbuf-append! rb 'g)
(test 'after-f
(sequence->list rb)
'(c d e f g))
(%rackonsole:ringbuf-append! rb 'h)
(test 'after-h
(sequence->list rb)
'(d e f g h))
(%rackonsole:ringbuf-append! rb 'i)
(test 'after-i
(sequence->list rb)
'(e f g h i))
(%rackonsole:ringbuf-append! rb 'j)
(test 'after-j
(sequence->list rb)
'(f g h i j))
(%rackonsole:ringbuf-append! rb 'k)
(test 'after-k
(sequence->list rb)
'(g h i j k))))))
(test-section 'prepend
(for ((start (in-range 0 5)))
(test-section (string->symbol (format "start-~A" start))
(let ((rb (%rackonsole:ringbuf/size/start 5 start)))
(test 'start
(sequence->list rb)
'())
(%rackonsole:ringbuf-prepend! rb 'a)
(test 'after-a
(sequence->list rb)
'(a))
(%rackonsole:ringbuf-prepend! rb 'b)
(test 'after-b
(sequence->list rb)
'(b a))
(%rackonsole:ringbuf-prepend! rb 'c)
(test 'after-c
(sequence->list rb)
'(c b a))
(%rackonsole:ringbuf-prepend! rb 'd)
(test 'after-d
(sequence->list rb)
'(d c b a))
(%rackonsole:ringbuf-prepend! rb 'e)
(test 'after-e
(sequence->list rb)
'(e d c b a))
(%rackonsole:ringbuf-prepend! rb 'f)
(test 'after-f
(sequence->list rb)
'(f e d c b))
(%rackonsole:ringbuf-prepend! rb 'g)
(test 'after-f
(sequence->list rb)
'(g f e d c))
(%rackonsole:ringbuf-prepend! rb 'h)
(test 'after-h
(sequence->list rb)
'(h g f e d))
(%rackonsole:ringbuf-prepend! rb 'i)
(test 'after-i
(sequence->list rb)
'(i h g f e))
(%rackonsole:ringbuf-prepend! rb 'j)
(test 'after-j
(sequence->list rb)
'(j i h g f))
(%rackonsole:ringbuf-prepend! rb 'k)
(test 'after-k
(sequence->list rb)
'(k j i h g)))))))