/extra/variants/variants-tests.factor

http://github.com/abeaumont/factor · Factor · 40 lines · 30 code · 9 blank · 1 comment · 0 complexity · 0d7371b2ede3bfba27a8a5ce289ff169 MD5 · raw file

  1. ! (c)2009 Joe Groff bsd license
  2. USING: kernel math tools.test variants slots ;
  3. IN: variants.tests
  4. VARIANT: list
  5. nil
  6. cons: { { first object } { rest list } }
  7. ;
  8. [ t ] [ nil list? ] unit-test
  9. [ t ] [ 1 nil <cons> list? ] unit-test
  10. [ f ] [ 1 list? ] unit-test
  11. : list-length ( list -- length )
  12. {
  13. { nil [ 0 ] }
  14. { cons [ nip list-length 1 + ] }
  15. } match ;
  16. [ 4 ]
  17. [ 5 6 7 8 nil <cons> <cons> <cons> <cons> list-length ] unit-test
  18. [ nil t ] [ list initial-value ] unit-test
  19. VARIANT: list2 ;
  20. VARIANT-MEMBER: list2 nil2
  21. VARIANT-MEMBER: list2 cons2: { { first object } { rest list2 } }
  22. [ t ] [ nil2 list2? ] unit-test
  23. [ t ] [ 1 nil2 <cons2> list2? ] unit-test
  24. [ f ] [ 1 list2? ] unit-test
  25. : list2-length ( list2 -- length )
  26. {
  27. { nil2 [ 0 ] }
  28. { cons2 [ nip list2-length 1 + ] }
  29. } match ;
  30. [ 4 ]
  31. [ 5 6 7 8 nil2 <cons2> <cons2> <cons2> <cons2> list2-length ] unit-test