/core/classes/intersection/intersection-tests.factor

http://github.com/abeaumont/factor · Factor · 59 lines · 40 code · 16 blank · 3 comment · 1 complexity · 59c493cf2d6d303751ac0596e400dc8d MD5 · raw file

  1. USING: kernel tools.test generic generic.standard classes math
  2. accessors classes.intersection slots math.order ;
  3. IN: classes.intersection.tests
  4. TUPLE: a ;
  5. TUPLE: a1 < a ; TUPLE: a2 < a ; TUPLE: a3 < a2 ;
  6. MIXIN: b
  7. INSTANCE: a3 b
  8. INSTANCE: a1 b
  9. INTERSECTION: c a2 b ;
  10. GENERIC: x ( a -- b )
  11. M: c x drop c ;
  12. M: a x drop a ;
  13. [ a ] [ T{ a } x ] unit-test
  14. [ a ] [ T{ a1 } x ] unit-test
  15. [ a ] [ T{ a2 } x ] unit-test
  16. [ t ] [ T{ a3 } c? ] unit-test
  17. [ t ] [ T{ a3 } \ x effective-method M\ c x eq? nip ] unit-test
  18. [ c ] [ T{ a3 } x ] unit-test
  19. ! More complex case
  20. TUPLE: t1 ;
  21. TUPLE: t2 < t1 ; TUPLE: t3 < t1 ;
  22. TUPLE: t4 < t2 ; TUPLE: t5 < t2 ;
  23. UNION: m t4 t5 t3 ;
  24. INTERSECTION: i t2 m ;
  25. GENERIC: g ( a -- b )
  26. M: i g drop i ;
  27. M: t4 g drop t4 ;
  28. [ t4 ] [ T{ t4 } g ] unit-test
  29. [ i ] [ T{ t5 } g ] unit-test
  30. PREDICATE: odd-integer < integer odd? ;
  31. ! [ TUPLE: omg { a intersection{ fixnum odd-integer } initial: 2 } ;" eval( -- ) ]
  32. ! [ bad-initial-value? ] must-fail-with
  33. TUPLE: omg { a intersection{ fixnum odd-integer } initial: 1 } ;
  34. [ 1 ] [ omg new a>> ] unit-test
  35. [ 3 ] [ omg new 3 >>a a>> ] unit-test
  36. [ omg new 1.2 >>a a>> ] [ bad-slot-value? ] must-fail-with
  37. PREDICATE: odd/float-between-10-20 < union{ odd-integer float }
  38. 10 20 between? ;
  39. [ t ] [ 17 odd/float-between-10-20? ] unit-test
  40. [ t ] [ 17.4 odd/float-between-10-20? ] unit-test
  41. [ f ] [ 18 odd/float-between-10-20? ] unit-test
  42. [ f ] [ 5 odd/float-between-10-20? ] unit-test
  43. [ f ] [ 5.75 odd/float-between-10-20? ] unit-test