#lang scheme/base
(require "../test-base.ss"
"annotation.ss"
"check-combinator.ss"
"check-combinator-syntax.ss"
"result.ss")
(define-annotation ann:num
(lambda (result) 0)
(lambda (result old new) (+ old new)))
(define-annotation ann:str
(lambda (result) "")
(lambda (result old new) (string-append old new)))
(define annotation-tests
(test-suite "annotation.ss"
(test-case "check-result-annotation"
(let ([result (car (check/annotate ([ann:num 123]) (check-pass)))])
(check-equal? (check-result-annotation result ann:num) 123)
(check-equal? (check-result-annotation result ann:str) "")))
(test-case "check-result-has-annotation?"
(let ([result (car (check/annotate ([ann:num 123]) (check-pass)))])
(check-true (check-result-has-annotation? result ann:num))
(check-false (check-result-has-annotation? result ann:str))))
(test-case "check-result-annotation-set"
(let* ([result0 (make-check-success)]
[result1 (check-result-annotation-set result0 ann:num 1)]
[result2 (check-result-annotation-set result1 ann:num 2)]
[result3 (check-result-annotation-set result2 ann:num 3)])
(check-equal? (check-result-annotation result1 ann:num) 1)
(check-equal? (check-result-annotation result2 ann:num) 3)
(check-equal? (check-result-annotation result3 ann:num) 6)))))
(provide annotation-tests)