80tst.rig 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. -- tests all details of USE80.PAS implemantation
  2. #W
  3. PRINT START;
  4. $A:=#F('4.0');
  5. $B:=#F('0.1');
  6. PRINT (. $A $B .);
  7. PRINT #CALL_PAS(80 '*' $A $B);
  8. #CALL_PAS(1);
  9. $F:=#TEST1(); -- returns 123.456
  10. #TEST2($F[1]);
  11. #TEST3( $F);
  12. #TEST4( $F);
  13. #TEST5();
  14. ##
  15. #TEST2 $F
  16. /
  17. PRINT (. 'printout in exponential forms:' .);
  18. PRINT (. print $F .);
  19. PRINT (. explode #EXPLODE($F) .);
  20. PRINT (. implode #IMPLODE($F) .);
  21. OPEN D ' ';
  22. D<< '<<-output ' $F;
  23. CLOSE D/
  24. ##
  25. #TEST3 $F
  26. / $XX:=#CALL_PAS(80 S '123.456');
  27. PRINT (. '80-S:good' $XX .);
  28. PRINT (. '80-s:NULL' #CALL_PAS(80 S '-1E77') .);
  29. PRINT (. '80-i:integer' #CALL_PAS(80 I 123) .);
  30. PRINT (. 'digits for 123.456 ' #CALL_PAS(80 D $F[1]) .);
  31. PRINT (. 'digits for 123E+12 ' #CALL_PAS(80 D $F[3]) .);
  32. PRINT (. 'digits for my-num=null ' #CALL_PAS(80 D $XX) .) ;
  33. $X:=$F[1];
  34. $D:=#CALL_PAS(80 D $X);
  35. IF $D AND ($D[1]+$D[2]>0) ->
  36. $REZ:=#CALL_PAS(80 Z $X ($D[1]+$D[2]+1)*100+$D[2])
  37. ELSIF T->
  38. $REZ:=#CALL_PAS(80 V $X)
  39. FI;
  40. PRINT(. 'doctest=123.456=' $REZ .);
  41. #CALL_PAS(1 'test3 ended');
  42. /
  43. ##
  44. #F $S / RETURN #CALL_PAS(80 S $S) / ##
  45. #TEST4
  46. /
  47. PRINT (. 'T-good' #CALL_PAS(80 T #F('2.14E+9')) .);
  48. PRINT (. 'T-bad ' #CALL_PAS(80 T #F('2.15E+9')) .);
  49. PRINT (. 'T-good' #CALL_PAS(80 T #F('-2.14E+9')) .);
  50. PRINT (. 'T-bad ' #CALL_PAS(80 T #F('-2.15E+9')) .);
  51. PRINT (. 'Z-expo 7.7e+00 ' #CALL_PAS(80 Z #F('7.7') (-1) ) .);
  52. PRINT (. 'Z-expo 7.7e+00 ' #CALL_PAS(80 Z #F('7.7') (799) ) .);
  53. PRINT (. 'Z-expo 7.70e+00 ' #CALL_PAS(80 Z #F('7.7') (899) ) .);
  54. PRINT (. 'Z-expo 8 ' #CALL_PAS(80 Z #F('7.7') (0) ) .);
  55. PRINT (. 'Z-expo *8 ' #CALL_PAS(80 Z #F('7.7') (1000) ) .);
  56. #CALL_PAS(1);
  57. PRINT (. 'Z-expo 7.7 ' #CALL_PAS(80 Z #F('7.7') (1) ) .);
  58. PRINT (. 'Z-expo *7.7 ' #CALL_PAS(80 Z #F('7.7') (801) ) .);
  59. PRINT (. 'Z-expo *7,70' #CALL_PAS(80 Z #F('7.7') (802) ) .);
  60. PRINT (. 'R 23.14000' #CALL_PAS(80 R #F('23.138') 2 ) .);
  61. PRINT (. 'R 23.14000' #CALL_PAS(80 R #F('23.144') 2 ) .);
  62. PRINT (. 'R 23.00000' #CALL_PAS(80 R #F('23.138') 0 ) .);
  63. PRINT (. 'R 23.00000' #CALL_PAS(80 R #F('23.138') (-2)) .);
  64. PRINT (. 'R -23.14000' #CALL_PAS(80 R #F('-23.138') 2 ) .);
  65. PRINT (. 'R -23.14000' #CALL_PAS(80 R #F('-23.144') 2 ) .);
  66. PRINT (. 'R -23.00000' #CALL_PAS(80 R #F('-23.138') 0 ) .);
  67. PRINT (. 'R -23.00000' #CALL_PAS(80 R #F('-23.138') (-2)) .);
  68. PRINT (. 'R null ' #CALL_PAS(80 R #F('23.138') 42) .);
  69. #CALL_PAS(1 'test4 ended' );
  70. /##
  71. #TEST1
  72. -- Part 1 reading float number from the lexical analyser
  73. /
  74. OPEN D '80TST.LST';
  75. D<<' 123.456 7.33333333333333333333333333333333333333333333333333';
  76. D<<' 123E+12 123E-12 123.456E+12 123.456E12 123. ';
  77. D<<' .56';
  78. $V:=(.F K F F F F F A N K F F F .);
  79. D<<' 7777777777777777777777777777777777777.88'; --39
  80. D<<' 777777777777777777777777777777777777.88'; --38
  81. D<<' 77777777777777777777777777777777777.88'; --37
  82. D<<' 7777777777777777777777777777777777.88'; --36
  83. CLOSE D;
  84. $A:=#CALL_PAS(35 '80TST.LST');
  85. FORALL $E IN $A DO
  86. IF #FATOM($E) -> $M:='F'
  87. ELSIF #_KEYWORD ($E) -> $M:='K'
  88. ELSIF #NUMBER($E) -> $M:='N'
  89. ELSIF #ATOM($E) -> $M:='A';
  90. ELSIF T-> $M:='X';
  91. FI;
  92. $MA!.:=$M;
  93. OD;
  94. PRINT (. really $MA .);
  95. PRINT (. expected $V .);
  96. #CALL_PAS(1);
  97. RETURN $A;
  98. /##
  99. #TEST5/
  100. $A:=#F('-1E20');
  101. $B:=#F('1.2E20');
  102. $C:=#F('-1.2E-20');
  103. $N:=#F('0');
  104. PRINT (. a b $A $B .);
  105. PRINT(. '+ good' #CALL_PAS(80 '+' $A $B) .);
  106. PRINT(. '- good' #CALL_PAS(80 '-' $A $B) .);
  107. PRINT(. '* good' #CALL_PAS(80 '*' $A #F('1e10')) .);
  108. PRINT(. '* good' #CALL_PAS(80 '*' #F('1e10') $B) .);
  109. PRINT(. '/ good' #CALL_PAS(80 '/' $A #F('1e10')) .);
  110. PRINT(. '/ good' #CALL_PAS(80 '/' #F('1e10') $B) .);
  111. PRINT(. '* bad ' #CALL_PAS(80 '*' $A $B) .);
  112. PRINT(. '* bad ' #CALL_PAS(80 '*' $C $C) .);
  113. PRINT(. '/ bad ' #CALL_PAS(80 '/' $A $C) .);
  114. PRINT(. '/ bad ' #CALL_PAS(80 '/' $C $A) .);
  115. PRINT(. '/ bad ' #CALL_PAS(80 '/' $B $N) .);
  116. #CALL_PAS(1);
  117. PRINT(. '+ good' #CALL_PAS(80 '+' $A $N) .);
  118. PRINT(. '+ good' #CALL_PAS(80 '+' $N $A) .);
  119. PRINT(. '+ good0' #CALL_PAS(80 '+' $N $N) .);
  120. PRINT(. '- good' #CALL_PAS(80 '-' $A $N) .);
  121. PRINT(. '- good' #CALL_PAS(80 '-' $N $A) .);
  122. PRINT(. '- good0' #CALL_PAS(80 '-' $N $N) .);
  123. PRINT(. '* good0' #CALL_PAS(80 '*' $A $N) .);
  124. PRINT(. '* good0' #CALL_PAS(80 '*' $N $A) .);
  125. PRINT(. '* good0' #CALL_PAS(80 '*' $N $N) .);
  126. PRINT(. '/ good0' #CALL_PAS(80 '/' $N $A) .);
  127. PRINT(. '/ bad ' #CALL_PAS(80 '/' $A $N) .);
  128. PRINT(. '/ bad ' #CALL_PAS(80 '/' $N $N) .);
  129. #CALL_PAS(1);
  130. /##
  131. #TEST4x
  132. / OPEN S ' ';
  133. $E:=#CALL_PAS(80 S '5.0');
  134. $E:=NULL;
  135. PRINT (.$E<0 $E>0 $E+0=0 $E=COPY($E).);
  136. $E1:=#CALL_PAS(80 S '4.0');
  137. S<<' to screen ' $E1 $E;
  138. PRINT (. $E1 $E .);
  139. $E:=COPY($E1);
  140. #CALL_PAS(1);
  141. PRINT #CALL_PAS(80 '+' $E $E1);
  142. PRINT #CALL_PAS(80 '*' $E $E1);
  143. PRINT #CALL_PAS(80 '/' $E $E1);
  144. PRINT #CALL_PAS(80 '/' $E #CALL_PAS(80 I 0));
  145. $E:=$E1;
  146. #CALL_PAS(1);
  147. PRINT 'COMPARING';
  148. PRINT #CALL_PAS(80 '<' $E $E1);
  149. PRINT #CALL_PAS(80 '>' $E $E1);
  150. PRINT #CALL_PAS(80 '<=' $E $E1);
  151. PRINT #CALL_PAS(80 '>=' $E $E1);
  152. PRINT #CALL_PAS(80 '=' $E $E1);
  153. PRINT #CALL_PAS(80 '<>' $E $E1);
  154. PRINT #CALL_PAS(80 'T' $E1 );
  155. PRINT #CALL_PAS(80 'Z' $E1 2505);
  156. $E:=#CALL_PAS(80 I 994);
  157. PRINT $E;
  158. #CALL_PAS(1);
  159. /##