typed-racket/typed-racket-test/unit-tests/type-alias-helper.rkt
2014-12-16 10:07:25 -05:00

79 lines
2.5 KiB
Racket

#lang racket/base
;; Unit tests for the type-alias-helper.rkt module
(require "test-utils.rkt"
racket/set
rackunit
syntax/id-table
typed-racket/env/type-alias-helper)
(provide tests)
(gen-test-main)
;; two aliases in their own components
(define example-1
(list (cons #'x (list #'x))
(cons #'y (list #'y))))
;; all one component
(define example-2
(list (cons #'x (list #'x #'y))
(cons #'y (list #'x))))
;; two components, one with two nodes
(define example-3
(list (cons #'x (list #'y))
(cons #'y (list #'x))
(cons #'z (list))))
;; one with cycles, two that form a line
(define example-4
(list (cons #'x (list #'y))
(cons #'y (list #'x))
(cons #'a (list #'b))
(cons #'b (list))))
;; two large cycles
(define example-5
(list (cons #'x (list #'y #'z))
(cons #'y (list #'x))
(cons #'z (list #'x #'y))
(cons #'a (list #'b))
(cons #'b (list #'c))
(cons #'c (list #'a))))
;; check topological order
(define example-6
(list (cons #'a (list #'b))
(cons #'d (list))
(cons #'c (list #'d #'e))
(cons #'b (list #'c))
(cons #'e (list #'f))
(cons #'f (list))))
;; helper function for the tests below
;; ignores order of ids in the components and the
;; order of the components (because neither are stable
;; except for topological ordering).
(define (equal-id-sets? x y)
(define (id-lsts->id-sets id-lsts)
(for/set ([id-lst id-lsts])
(for/set ([id id-lst]) (syntax-e id))))
(equal? (id-lsts->id-sets x)
(id-lsts->id-sets y)))
(define-binary-check (check-equal?/id equal-id-sets? actual expected))
(define tests
(test-suite
"Tests for type-alias-helper"
(check-equal?/id (find-strongly-connected-type-aliases example-1)
(list (list #'x) (list #'y)))
(check-equal?/id (find-strongly-connected-type-aliases example-2)
(list (list #'x #'y)))
(check-equal?/id (find-strongly-connected-type-aliases example-3)
(list (list #'z) (list #'x #'y)))
(check-equal?/id (find-strongly-connected-type-aliases example-4)
(list (list #'a) (list #'b) (list #'y #'x)))
(check-equal?/id (find-strongly-connected-type-aliases example-5)
(list (list #'b #'a #'c) (list #'z #'x #'y)))
(check-equal?/id (find-strongly-connected-type-aliases example-6)
(list (list #'a) (list #'b) (list #'c)
(list #'e) (list #'f) (list #'d)))))