#!/bin/sh
exec ${srcdir:-.}/guile-test-env guile -s "$0" "$@"
!#

(use-modules (gw-test-enumeration)
             (unit-test))

(define-class <test-enumeration> (<test-case>))

(define-method (test-val->int (self <test-enumeration>))
  (assert-true (and (procedure? enum-<gw-test-enum>-val->int)
                     (= 0 (enum-<gw-test-enum>-val->int 0))
                     (= 1 (enum-<gw-test-enum>-val->int 1))
                     (= 2 (enum-<gw-test-enum>-val->int 2))
                     (= 0 (enum-<gw-test-enum>-val->int 'gw-test-enum-zero))
                     (= 1 (enum-<gw-test-enum>-val->int 'gw-test-enum-one))
                     (= 2 (enum-<gw-test-enum>-val->int 'gw-test-enum-two))
                     (not (enum-<gw-test-enum>-val->int 'foo-foo))
                     (not (enum-<gw-test-enum>-val->int 32)))))

(define-method (test-val->sym (self <test-enumeration>))
  (assert-true
   (and (procedure? enum-<gw-test-enum>-val->sym)
        (not (enum-<gw-test-enum>-val->sym 999 #f))
        (null? (enum-<gw-test-enum>-val->sym 999 #t))
        
        (eq? 'gw-test-enum-zero (enum-<gw-test-enum>-val->sym 0 #f))
        (eq? 'gw-test-enum-one (enum-<gw-test-enum>-val->sym 1 #f))
        (memq (enum-<gw-test-enum>-val->sym 2 #f)
              '(gw-test-enum-two gw-test-enum-two-too gw-test-enum-two-many))
        
        (equal? '(gw-test-enum-zero) (enum-<gw-test-enum>-val->sym 0 #t))
        (equal? '(gw-test-enum-one) (enum-<gw-test-enum>-val->sym 1 #t))
        (let ((result (enum-<gw-test-enum>-val->sym 2 #t)))
          (and (memq 'gw-test-enum-two result)
               (memq 'gw-test-enum-two-too result)
               (memq 'gw-test-enum-two-many result)
               (null? 
                (delq 'gw-test-enum-two
                      (delq 'gw-test-enum-two-too
                            (delq 'gw-test-enum-two-many result)))))))))

(define-method (test-enumeration-echo (self <test-enumeration>))
  (assert-true
   (and (procedure? gw-test-gw-enumeration-echo)
        (= 0 (gw-test-gw-enumeration-echo 0))
        (= 1 (gw-test-gw-enumeration-echo 1))
        (= 2 (gw-test-gw-enumeration-echo 2))
        (= 0 (gw-test-gw-enumeration-echo 'gw-test-enum-zero))
        (= 1 (gw-test-gw-enumeration-echo 'gw-test-enum-one))
        (= 2 (gw-test-gw-enumeration-echo 'gw-test-enum-two))
        (= 2 (gw-test-gw-enumeration-echo 'gw-test-enum-two-too))
        (= 2 (gw-test-gw-enumeration-echo 'gw-test-enum-two-many)))))

(exit-with-summary (run-all-defined-test-cases))

;; Local Variables:
;; mode: scheme
;; End:


syntax highlighted by Code2HTML, v. 0.9.1