PageRenderTime 44ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/tester.fr

https://gitlab.com/BGCX261/zmforth-hg-to-git
Forth | 61 lines | 49 code | 12 blank | 0 comment | 0 complexity | 4a526f82a135850359e2629a485823c7 MD5 | raw file
Possible License(s): GPL-3.0
  1. \ From: John Hayes S1I
  2. \ Subject: tester.fr
  3. \ Date: Mon, 27 Nov 95 13:10:09 PST
  4. \ (C) 1995 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY
  5. \ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.
  6. \ VERSION 1.1
  7. \ 22/1/09 The words { and } have been changed to T{ and }T respectively to
  8. \ agree with the Forth 200X file ttester.fs. This avoids clashes with
  9. \ locals using { ... } and the FSL use of }
  10. HEX
  11. \ SET THE FOLLOWING FLAG TO TRUE FOR MORE VERBOSE OUTPUT; THIS MAY
  12. \ ALLOW YOU TO TELL WHICH TEST CAUSED YOUR SYSTEM TO HANG.
  13. VARIABLE VERBOSE
  14. false VERBOSE !
  15. \ true VERBOSE !
  16. : EMPTY-STACK \ ( ... -- ) EMPTY STACK: HANDLES UNDERFLOWED STACK TOO.
  17. DEPTH ?DUP IF DUP 0< IF NEGATE 0 DO 0 LOOP ELSE 0 DO DROP LOOP THEN THEN ;
  18. : ERROR \ ( C-ADDR U -- ) DISPLAY AN ERROR MESSAGE FOLLOWED BY
  19. \ THE LINE THAT HAD THE ERROR.
  20. TYPE SOURCE TYPE CR \ DISPLAY LINE CORRESPONDING TO ERROR
  21. EMPTY-STACK \ THROW AWAY EVERY THING ELSE
  22. \ quit \ *** Uncomment this line to QUIT on an error
  23. ;
  24. VARIABLE ACTUAL-DEPTH \ STACK RECORD
  25. CREATE ACTUAL-RESULTS 20 CELLS ALLOT
  26. : T{ \ ( -- ) SYNTACTIC SUGAR.
  27. ;
  28. : -> \ ( ... -- ) RECORD DEPTH AND CONTENT OF STACK.
  29. DEPTH DUP ACTUAL-DEPTH ! \ RECORD DEPTH
  30. ?DUP IF \ IF THERE IS SOMETHING ON STACK
  31. 0 DO ACTUAL-RESULTS I CELLS + ! LOOP \ SAVE THEM
  32. THEN ;
  33. : }T \ ( ... -- ) COMPARE STACK (EXPECTED) CONTENTS WITH SAVED
  34. \ (ACTUAL) CONTENTS.
  35. DEPTH ACTUAL-DEPTH @ = IF \ IF DEPTHS MATCH
  36. DEPTH ?DUP IF \ IF THERE IS SOMETHING ON THE STACK
  37. 0 DO \ FOR EACH STACK ITEM
  38. ACTUAL-RESULTS I CELLS + @ \ COMPARE ACTUAL WITH EXPECTED
  39. <> IF S" INCORRECT RESULT: " ERROR LEAVE THEN
  40. LOOP
  41. THEN
  42. ELSE \ DEPTH MISMATCH
  43. S" WRONG NUMBER OF RESULTS: " ERROR
  44. THEN ;
  45. : TESTING \ ( -- ) TALKING COMMENT.
  46. SOURCE VERBOSE @
  47. IF DUP >R TYPE CR R> >IN !
  48. ELSE >IN ! DROP [char] * emit
  49. THEN ;