fc21_len.awl 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. FUNCTION FC 1 : VOID
  2. TITLE = Check FC 21 with L as data source
  3. VAR_TEMP
  4. STR : STRING;
  5. END_VAR
  6. BEGIN
  7. // Check zero length (L-stack)
  8. L P##STR
  9. LAR1
  10. L 254
  11. T B [AR1, P#0.0]
  12. L 0
  13. T B [AR1, P#1.0]
  14. LAR1 P#42.0
  15. LAR2 P#42.1
  16. AUF DB 1
  17. CALL "LEN" (
  18. S := #STR,
  19. RET_VAL := MW 0,
  20. )
  21. __ASSERT== __STW BIE, 1
  22. __ASSERT== __AR 1, P#42.0
  23. __ASSERT== __AR 2, P#42.1
  24. __ASSERT== DBNO, 1
  25. L MW 0
  26. __ASSERT== __ACCU 1, 0
  27. // Check 1 length (L-stack)
  28. L P##STR
  29. LAR1
  30. L 254
  31. T B [AR1, P#0.0]
  32. L 1
  33. T B [AR1, P#1.0]
  34. LAR1 P#42.0
  35. LAR2 P#42.1
  36. AUF DB 1
  37. CALL "LEN" (
  38. S := #STR,
  39. RET_VAL := MW 0,
  40. )
  41. __ASSERT== __STW BIE, 1
  42. __ASSERT== __AR 1, P#42.0
  43. __ASSERT== __AR 2, P#42.1
  44. __ASSERT== DBNO, 1
  45. L MW 0
  46. __ASSERT== __ACCU 1, 1
  47. // Check full length (L-stack)
  48. L P##STR
  49. LAR1
  50. L 254
  51. T B [AR1, P#0.0]
  52. L 254
  53. T B [AR1, P#1.0]
  54. LAR1 P#42.0
  55. LAR2 P#42.1
  56. AUF DB 1
  57. CALL "LEN" (
  58. S := #STR,
  59. RET_VAL := MW 0,
  60. )
  61. __ASSERT== __STW BIE, 1
  62. __ASSERT== __AR 1, P#42.0
  63. __ASSERT== __AR 2, P#42.1
  64. __ASSERT== DBNO, 1
  65. L MW 0
  66. __ASSERT== __ACCU 1, 254
  67. // Check length bigger than maxlen (L-stack)
  68. L P##STR
  69. LAR1
  70. L 10
  71. T B [AR1, P#0.0]
  72. L 100
  73. T B [AR1, P#1.0]
  74. LAR1 P#42.0
  75. LAR2 P#42.1
  76. AUF DB 1
  77. CALL "LEN" (
  78. S := #STR,
  79. RET_VAL := MW 0,
  80. )
  81. __ASSERT== __STW BIE, 1
  82. __ASSERT== __AR 1, P#42.0
  83. __ASSERT== __AR 2, P#42.1
  84. __ASSERT== DBNO, 1
  85. L MW 0
  86. __ASSERT== __ACCU 1, 100
  87. END_FUNCTION
  88. FUNCTION FC 2 : VOID
  89. TITLE = Check FC 21 with DB as data source
  90. BEGIN
  91. // Check zero length (DB)
  92. AUF DB 2
  93. LAR1 P#DBX 0.0
  94. L 254
  95. T B [AR1, P#0.0]
  96. L 0
  97. T B [AR1, P#1.0]
  98. LAR1 P#42.0
  99. LAR2 P#42.1
  100. AUF DB 1
  101. CALL "LEN" (
  102. S := DB2.DBSTR,
  103. RET_VAL := MW 0,
  104. )
  105. __ASSERT== __STW BIE, 1
  106. __ASSERT== __AR 1, P#42.0
  107. __ASSERT== __AR 2, P#42.1
  108. __ASSERT== DBNO, 1
  109. L MW 0
  110. __ASSERT== __ACCU 1, 0
  111. // Check 1 length (DB)
  112. AUF DB 2
  113. LAR1 P#DBX 0.0
  114. L 254
  115. T B [AR1, P#0.0]
  116. L 1
  117. T B [AR1, P#1.0]
  118. LAR1 P#42.0
  119. LAR2 P#42.1
  120. AUF DB 1
  121. CALL "LEN" (
  122. S := DB2.DBSTR,
  123. RET_VAL := MW 0,
  124. )
  125. __ASSERT== __STW BIE, 1
  126. __ASSERT== __AR 1, P#42.0
  127. __ASSERT== __AR 2, P#42.1
  128. __ASSERT== DBNO, 1
  129. L MW 0
  130. __ASSERT== __ACCU 1, 1
  131. // Check full length (DB)
  132. AUF DB 2
  133. LAR1 P#DBX 0.0
  134. L 254
  135. T B [AR1, P#0.0]
  136. L 254
  137. T B [AR1, P#1.0]
  138. LAR1 P#42.0
  139. LAR2 P#42.1
  140. AUF DB 1
  141. CALL "LEN" (
  142. S := DB2.DBSTR,
  143. RET_VAL := MW 0,
  144. )
  145. __ASSERT== __STW BIE, 1
  146. __ASSERT== __AR 1, P#42.0
  147. __ASSERT== __AR 2, P#42.1
  148. __ASSERT== DBNO, 1
  149. L MW 0
  150. __ASSERT== __ACCU 1, 254
  151. // Check length bigger than maxlen (DB)
  152. AUF DB 2
  153. LAR1 P#DBX 0.0
  154. L 10
  155. T B [AR1, P#0.0]
  156. L 100
  157. T B [AR1, P#1.0]
  158. LAR1 P#42.0
  159. LAR2 P#42.1
  160. AUF DB 1
  161. CALL "LEN" (
  162. S := DB2.DBSTR,
  163. RET_VAL := MW 0,
  164. )
  165. __ASSERT== __STW BIE, 1
  166. __ASSERT== __AR 1, P#42.0
  167. __ASSERT== __AR 2, P#42.1
  168. __ASSERT== DBNO, 1
  169. L MW 0
  170. __ASSERT== __ACCU 1, 100
  171. END_FUNCTION
  172. ORGANIZATION_BLOCK OB 1
  173. BEGIN
  174. CALL FC 1
  175. CALL FC 2
  176. CALL SFC 46 // Stop CPU
  177. END_ORGANIZATION_BLOCK
  178. DATA_BLOCK DB 1
  179. STRUCT
  180. TMP : INT;
  181. END_STRUCT;
  182. BEGIN
  183. END_DATA_BLOCK
  184. DATA_BLOCK DB 2
  185. STRUCT
  186. DBSTR : STRING;
  187. END_STRUCT;
  188. BEGIN
  189. END_DATA_BLOCK