79 lines
2.5 KiB
Racket
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)))))
|