Test case R0160
Full test suiteDevice test case
String functions
This test case it part of the test suite proposed for new devices.
Test case ID: R0160
Language: ST
tests2/t0160.stPROGRAM TEST_R0160 // pag 63 VAR s2,s3,s4,s5,s6,s7, s8: STRING; u1,u2 : STRING; ts1,ts2,ts3 : STRING; i1,i2,i9 : INT; b1 : BOOL; fb: FB3; END_VAR i1 := 12; i1 := LEN(STRING#'ASTRING'); _GEB_ASSERT_(i1 = 7); i2 := LEN('$C4STRING'); // ÄSTRING (A with dieresis, in ISO-8859-1) _GEB_ASSERT_(i2 = 7); s2 := LEFT( IN:= 'A$53TR', L := 3 ); // 'ASTR' _GEB_ASSERT_(s2 = 'AST'); s3 := RIGHT( IN:= 'ASTR', L := 3 ); _GEB_ASSERT_(s3 = 'STR'); s4 := MID( IN:= 'ABTRWXYZ', L := 3 , P := 2 ); _GEB_ASSERT_(s4 = 'BTR'); s8 := REPLACE( IN1:= 'ABCDE', IN2 := 'X', L := 2 , P :=3 ); _GEB_ASSERT_(s8 = 'ABXE'); s8 := REPLACE( IN1:= 'ABCDE', IN2 := 'X', L := 4 , P :=1 ); _GEB_ASSERT_(s8 = 'XE'); s8 := REPLACE( IN1:= 'ABCDE', IN2 := 'X', L := 4 , P :=2 ); _GEB_ASSERT_(s8 = 'AX'); s8 := REPLACE( IN1:= 'ABCDE', IN2 := 'X', L := 5 , P :=1 ); _GEB_ASSERT_(s8 = 'X'); s8 := REPLACE( IN1:= 'ABCDE', IN2 := 'X', L := 0 , P :=2 ); _GEB_ASSERT_(s8 = 'AXBCDE'); s8 := REPLACE( IN1:= 'ABC', IN2 := 'XY' , P :=2+1 ,L:=0 ); _GEB_ASSERT_(s8 = 'ABXYC'); s6 := INSERT( IN1:= 'ABC', IN2 := 'XY' , P :=2 ); _GEB_ASSERT_(s6 = 'ABXYC'); s5 := CONCAT( 'AB', 'CD' , 'E' ); _GEB_ASSERT_(s5 = 'ABCDE'); s7 := DELETE( IN:= 'ABXYC', L := 2 , P :=3 ); _GEB_ASSERT_(s7 = 'ABC'); i9 := FIND( IN1:= 'ABCBC', IN2 := 'BC'); _GEB_ASSERT_(i9 = 2); ts1 := CONCAT('TS:' ,WORD_TO_STRING(i1 + 10)); _GEB_ASSERT_(ts1 = 'TS:0x11'); ts2 := BOOL_TO_STRING(1); _GEB_ASSERT_(ts2 = '1'); ts3 := TIME_TO_STRING(TIME#10h); _GEB_ASSERT_(ts3 = 'T#10h00m00s000ms'); u1 := 'a$$b'; // a$b _GEB_ASSERT_(LEN(u1) = 3); u1 := '$$'; _GEB_ASSERT_(LEN(u1) = 1); u1 := 'A$'=$$=$C4Z"\'; // A'=$=ÄZ"\ _GEB_ASSERT_(LEN(u1)=9); u2 := 'é UTF-8'; // this is UTF-8 (source) coded! _GEB_ASSERT_(u2 = 'é UTF-8'); _GEB_ASSERT_(LEN(u2) = 7); b1 := s2 = 'ASTR'; _GEB_ASSERT_(fb.so = '?'); fb(I1 := 27 , si := 'Hi'); _GEB_ASSERT_(fb.O1 = 427); _GEB_ASSERT_(fb.so = 'Hi400YES'); fb(I1 := 1 , si := 'Bye'); _GEB_ASSERT_(fb.so = 'Bye401NO'); fb(I1 := 1 ); _GEB_ASSERT_(fb.so = 'Bye402YES'); (* this could be undefined behaviour *) END_PROGRAM (* Function block with strings CONT starts at 400, increments by 1 at the end of each execution sx toggles at the end of each execution between YES and NO (YES during first execution) O1 := I1 + CONT so := CONCAT(si,INT_TO_STRING(CONT),sx); *) FUNCTION_BLOCK FB3 VAR_INPUT I1 : INT; si:STRING; END_VAR VAR CONT : INT := 400; sx : STRING := 'YES'; END_VAR VAR_OUTPUT O1 : INT; so: STRING := '?' ; END_VAR O1 := I1 + CONT; so := CONCAT(CONCAT(si,INT_TO_STRING(CONT)),sx); CONT := CONT+1; IF sx = 'YES' THEN sx := 'NO'; ELSE sx := 'YES'; END_IF; END_FUNCTION_BLOCK