test/test-util.rkt
#lang racket 

(require "../rsound.rkt"
         "../util.rkt"
         rackunit)


(define r (make-tone 882 0.2 44100 44100))

(check-equal? (rsound-nth-sample/left r 0) 0)
(check-equal? (rsound-nth-sample/right r 50) 0)
(check-= (rsound-nth-sample/left r 27) (round (* s16max (* 0.2 (sin (* twopi 882 27/44100))))) 0.0)

;; table-based-sine-wave

(check-= ((raw-sine-wave 4 44100) 13) (sin (* 2 pi 13/44100 4)) 1e-4)

(check-= ((raw-square-wave 2 500) 0) 1.0 1e-4)
(check-= ((raw-square-wave 2 500) 10) 1.0 1e-4)
(check-= ((raw-square-wave 2 500) 124) 1.0 1e-4)
(check-= ((raw-square-wave 2 500) 125) -1.0 1e-4)
(check-= ((raw-square-wave 2 500) 249) -1.0 1e-4)
(check-= ((raw-square-wave 2 500) 250)  1.0 1e-4)
(check-= ((raw-square-wave 3 500) 166) -1.0 1e-4)
(check-= ((raw-square-wave 3 500) 167)  1.0 1e-4)



;; vectors->rsound

(let ([r (vectors->rsound (vector 3 4 5) (vector 2 -15 0) 200)]
      [s (/ s16max 15)])
  (check-equal? (rsound-nth-sample/left r 0)  (round (* s 3)))
  (check-equal? (rsound-nth-sample/right r 1)  (round (* s -15))))

(check-not-exn (lambda () (make-harm3tone/memoized 430 0.1 400 44100)))

;; is fader too slow?
;; answer: not yet a problem.
#;(time 
 (for ([i (in-range 100)])
   (fun->mono-rsound 44100 44100 (fader 44100))))

#;(time 
 (for ([i (in-range 100)])
   (fun->mono-rsound 44100 44100 (sine-wave 440 44100))))

#;(time
 (for ([i (in-range 100)])
   (fun->mono-rsound 44100 44100 (sawtooth-wave 440 44100))))

(let ([tr (sawtooth-wave 100 1000)])
  (check-= (tr 0) 0.0 1e-5)
  (check-= (tr 1) 0.2 1e-5)
  (check-= (tr 5) -1.0 1e-5))