PageRenderTime 74ms CodeModel.GetById 35ms RepoModel.GetById 0ms app.codeStats 0ms

/doc/perturb/stringtest.fth

https://github.com/chitselb/pettil
Forth | 161 lines | 129 code | 32 blank | 0 comment | 2 complexity | e6c3764cedfa04517e75d3d41c0c5bec MD5 | raw file
  1. \ To test the ANS Forth String word set
  2. \ This program was written by Gerry Jackson in 2006, with contributions from
  3. \ others where indicated, and is in the public domain - it can be distributed
  4. \ and/or modified in any way but please retain this notice.
  5. \ This program is distributed in the hope that it will be useful,
  6. \ but WITHOUT ANY WARRANTY; without even the implied warranty of
  7. \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. \ The tests are not claimed to be comprehensive or correct
  9. \ ------------------------------------------------------------------------------
  10. \ Version 0.6 1 April 2012 Tests placed in the public domain.
  11. \ 0.5 29 April 2010 Added tests for SEARCH and COMPARE with
  12. \ all strings zero length (suggested by Krishna Myneni).
  13. \ SLITERAL test amended in line with comp.lang.forth
  14. \ discussion
  15. \ 0.4 30 November 2009 <true> and <false> replaced with TRUE
  16. \ and FALSE
  17. \ 0.3 6 March 2009 { and } replaced with T{ and }T
  18. \ 0.2 20 April 2007 ANS Forth words changed to upper case
  19. \ 0.1 Oct 2006 First version released
  20. \ ------------------------------------------------------------------------------
  21. \ The tests are based on John Hayes test program for the core word set
  22. \ and requires those files to have been loaded
  23. \ Words tested in this file are:
  24. \ -TRAILING /STRING BLANK CMOVE CMOVE> COMPARE SEARCH SLITERAL
  25. \
  26. \ ------------------------------------------------------------------------------
  27. \ Assumptions and dependencies:
  28. \ - tester.fr or ttester.fs has been loaded prior to this file
  29. \ - COMPARE is case sensitive
  30. \ ------------------------------------------------------------------------------
  31. TESTING String word set
  32. DECIMAL
  33. T{ : s1 S" abcdefghijklmnopqrstuvwxyz" ; -> }T
  34. T{ : s2 S" abc" ; -> }T
  35. T{ : s3 S" jklmn" ; -> }T
  36. T{ : s4 S" z" ; -> }T
  37. T{ : s5 S" mnoq" ; -> }T
  38. T{ : s6 S" 12345" ; -> }T
  39. T{ : s7 S" " ; -> }T
  40. T{ : s8 S" abc " ; -> }T
  41. T{ : s9 S" " ; -> }T
  42. T{ : s10 S" a " ; -> }T
  43. \ ------------------------------------------------------------------------------
  44. TESTING -TRAILING
  45. T{ s1 -TRAILING -> s1 }T
  46. T{ s8 -TRAILING -> s8 2 - }T
  47. T{ s7 -TRAILING -> s7 }T
  48. T{ s9 -TRAILING -> s9 DROP 0 }T
  49. T{ s10 -TRAILING -> s10 1- }T
  50. \ ------------------------------------------------------------------------------
  51. TESTING /STRING
  52. T{ s1 5 /STRING -> s1 SWAP 5 + SWAP 5 - }T
  53. T{ s1 10 /STRING -4 /STRING -> s1 6 /STRING }T
  54. T{ s1 0 /STRING -> s1 }T
  55. \ ------------------------------------------------------------------------------
  56. TESTING SEARCH
  57. T{ s1 s2 SEARCH -> s1 TRUE }T
  58. T{ s1 s3 SEARCH -> s1 9 /STRING TRUE }T
  59. T{ s1 s4 SEARCH -> s1 25 /STRING TRUE }T
  60. T{ s1 s5 SEARCH -> s1 FALSE }T
  61. T{ s1 s6 SEARCH -> s1 FALSE }T
  62. T{ s1 s7 SEARCH -> s1 TRUE }T
  63. T{ s7 PAD 0 SEARCH -> s7 TRUE }T
  64. \ ------------------------------------------------------------------------------
  65. TESTING COMPARE
  66. T{ s1 s1 COMPARE -> 0 }T
  67. T{ s1 PAD SWAP CMOVE -> }T
  68. T{ s1 PAD OVER COMPARE -> 0 }T
  69. T{ s1 PAD 6 COMPARE -> 1 }T
  70. T{ PAD 10 s1 COMPARE -> -1 }T
  71. T{ s1 PAD 0 COMPARE -> 1 }T
  72. T{ PAD 0 s1 COMPARE -> -1 }T
  73. T{ s1 s6 COMPARE -> 1 }T
  74. T{ s6 s1 COMPARE -> -1 }T
  75. T{ s7 PAD 0 COMPARE -> 0 }T
  76. : "abdde" S" abdde" ;
  77. : "abbde" S" abbde" ;
  78. : "abcdf" S" abcdf" ;
  79. : "abcdee" S" abcdee" ;
  80. T{ s1 "abdde" COMPARE -> -1 }T
  81. T{ s1 "abbde" COMPARE -> 1 }T
  82. T{ s1 "abcdf" COMPARE -> -1 }T
  83. T{ s1 "abcdee" COMPARE -> 1 }T
  84. : s11 S" 0abc" ;
  85. : s12 S" 0aBc" ;
  86. T{ s11 s12 COMPARE -> 1 }T
  87. T{ s12 s11 COMPARE -> -1 }T
  88. \ ------------------------------------------------------------------------------
  89. TESTING CMOVE and CMOVE>
  90. PAD 30 CHARS 0 FILL
  91. T{ s1 PAD SWAP CMOVE -> }T
  92. T{ s1 PAD s1 SWAP DROP COMPARE -> 0 }T
  93. T{ s6 PAD 10 CHARS + SWAP CMOVE -> }T
  94. T{ S" abcdefghij12345pqrstuvwxyz" PAD s1 SWAP DROP COMPARE -> 0 }T
  95. T{ PAD 15 CHARS + PAD CHAR+ 6 CMOVE -> }T
  96. T{ S" apqrstuhij12345pqrstuvwxyz" PAD 26 COMPARE -> 0 }T
  97. T{ PAD PAD 3 CHARS + 7 CMOVE -> }T
  98. T{ S" apqapqapqa12345pqrstuvwxyz" PAD 26 COMPARE -> 0 }T
  99. T{ PAD PAD CHAR+ 10 CMOVE -> }T
  100. T{ S" aaaaaaaaaaa2345pqrstuvwxyz" PAD 26 COMPARE -> 0 }T
  101. T{ s7 PAD 14 CHARS + SWAP CMOVE -> }T
  102. T{ S" aaaaaaaaaaa2345pqrstuvwxyz" PAD 26 COMPARE -> 0 }T
  103. PAD 30 CHARS 0 FILL
  104. T{ s1 PAD SWAP CMOVE> -> }T
  105. T{ s1 PAD s1 SWAP DROP COMPARE -> 0 }T
  106. T{ s6 PAD 10 CHARS + SWAP CMOVE> -> }T
  107. T{ S" abcdefghij12345pqrstuvwxyz" PAD s1 SWAP DROP COMPARE -> 0 }T
  108. T{ PAD 15 CHARS + PAD CHAR+ 6 CMOVE> -> }T
  109. T{ S" apqrstuhij12345pqrstuvwxyz" PAD 26 COMPARE -> 0 }T
  110. T{ PAD 13 CHARS + PAD 10 CHARS + 7 CMOVE> -> }T
  111. T{ S" apqrstuhijtrstrstrstuvwxyz" PAD 26 COMPARE -> 0 }T
  112. T{ PAD 12 CHARS + PAD 11 CHARS + 10 CMOVE> -> }T
  113. T{ S" apqrstuhijtvvvvvvvvvvvwxyz" PAD 26 COMPARE -> 0 }T
  114. T{ s7 PAD 14 CHARS + SWAP CMOVE> -> }T
  115. T{ S" apqrstuhijtvvvvvvvvvvvwxyz" PAD 26 COMPARE -> 0 }T
  116. \ ------------------------------------------------------------------------------
  117. TESTING BLANK
  118. : s13 S" aaaaa a" ; \ Don't move this down or might corrupt PAD
  119. T{ PAD 25 CHAR a FILL -> }T
  120. T{ PAD 5 CHARS + 6 BLANK -> }T
  121. T{ PAD 12 s13 COMPARE -> 0 }T
  122. \ ------------------------------------------------------------------------------
  123. TESTING SLITERAL
  124. T{ HERE DUP s1 DUP ALLOT ROT SWAP CMOVE s1 SWAP DROP 2CONSTANT s1a -> }T
  125. T{ : s14 [ s1a ] SLITERAL ; -> }T
  126. T{ s1a s14 COMPARE -> 0 }T
  127. T{ s1a DROP s14 DROP = -> FALSE }T
  128. \ ------------------------------------------------------------------------------
  129. CR .( End of String word tests) CR