;;;; timed-resource-test.scm ;;;; Kon Lovett, Mar '20 ;;;; Kon Lovett, ? ;;; (import test) (import (only (chicken format) format)) (import (srfi 18)) (include "test-gloss.incl") #; ;FIXME Gloss API? (define sleeping-glossf (o glossf countdown seconds)) (define (sleeping-glossf secs) (glossf "Sleeping ~A secs~A" secs #\return) (thread-sleep! secs) ) ;; (test-begin "Timed Resource") (import timed-resource) ;;; (import (chicken blob)) (import (srfi 4)) ;; (define-syntax inc! (syntax-rules () ((inc! ?loc) (let ((val ?loc)) (set! ?loc (add1 val)) ) ) ) ) ;; (define (read-blob u8cnt #!optional (port (current-input-port))) (u8vector->blob (read-u8vector u8cnt port)) ) ;;; (define-constant ACTIVE-SECONDS 1.0) (define-constant BUFFER-BYTES 16) (define +opened+ 0) (define +closed+ 0) (define (timed-random-blob opener) (let ( (+tr+ (make-timed-resource (lambda () (let ((port (opener))) (test-assert "Resource Opened" port) (inc! +opened+) port ) ) (lambda (port) (close-output-port port) (inc! +closed+) ) ACTIVE-SECONDS)) ) (lambda (#!optional (cnt 16)) (with-timed-resource +tr+ (cut read-blob cnt <>)) ) ) ) ;;; ;; Config (cond-expand (windows ;;FIXME a windows file to read (define (open-test-port) #f ) ) (unix (define (open-test-port) (open-input-file "/dev/random" #:binary) ) ) ) ;; Test (test-group "Simple Timed Resource" (let ( (x ((timed-random-blob open-test-port) BUFFER-BYTES)) ) (test-assert "Resource Read Type" (blob? x)) (test "Resource Read Size" BUFFER-BYTES (blob-size x)) ) ;Wait a little longer than the timeout (sleeping-glossf (+ ACTIVE-SECONDS 0.5)) ;Better be closed now! (test "Resource Closed" +closed+ +opened+) ) ;;; (test-end "Timed Resource") (test-exit)