Test case R0001
Full test suiteDevice test case
Type conversions
This test case it part of the test suite proposed for new devices.
Test case ID: R0001
Language: ST
tests2/t0001.st
// type conversions
PROGRAM T0001
VAR
I1,I2,I3 : INT;
SI1,SI2,SI3 : SINT;
USI1,USI2 : USINT;
B1,B2: BOOL;
W1, W2 : WORD;
R1, R2 : REAL;
LR1, LR2 : LREAL;
S1 : STRING;
END_VAR
S1 := 'Testing';
S1 := LEFT(S1,2);
S1 := LEFT(S1,BYTE#2); (* automatic castin BYTE -> INT - S1='Te' *)
I1 := -(INT#-8192 - 16#20); // 8224
I1 := NEG(-I1); (* NEG is non-standard *) // 8224
SI1 := 16;
USI1 := SI1;
USI1 := USI1*3 + SINT_TO_USINT(SI1)/2; (* not necessary but legal USI1=56*)
I1 := SINT_TO_INT(SI1) - I1 ; (* SINT_TO_INT no necessary here *) (* I1= -8208 *)
_GEB_ASSERT_(I1 = INT#-8208 );
W1 := AND(INT#254,USINT#11); (* automatic casting to INT -> WORD W1=0xA *)
I2 := INT#-57; (* test C comment inside ST comment */ *)
LR1 := INT_TO_REAL(I2) - 0.23 ; // -57.2300
_GEB_ASSERT_EQDOUBLE_(LR1 , -57.23 );
_GEB_ASSERT_EQDOUBLE_(LR2 , 0.0 );
SI1 := INT_TO_SINT(I2); (* necessary - narrowing conversion SI1 *) // -57
SI2 := BYTE#32 / USINT#4; (* implicit conversion *) // 8
I2 := BYTE#32 / BYTE#4 + MUL(WORD#320 , BYTE#4); // 8 + 128 = 1288 = 0x508
B2 := 1=2;
B1 := INT_TO_BOOL(20000); (* true *)
W2 := BOOL_TO_WORD(B1) OR INT_TO_WORD(I2); (* 0x1 | 0x508 =0x509 *)
I3 := LREAL_TO_INT(LR1);
SI3 := WORD_TO_SINT(IN:=W2,EN:=TRUE);
_GEB_ASSERT_(I2 = INT#1288 );
_GEB_ASSERT_(B1 = TRUE );
_GEB_ASSERT_(B2 = FALSE );
_GEB_ASSERT_EQFLOAT_(R1 , 0.0 );
_GEB_ASSERT_EQFLOAT_(R2 , 0.0 );
_GEB_ASSERT_(S1 = 'Te');
_GEB_ASSERT_(SI1 = SINT#-57);
_GEB_ASSERT_(SI2 = SINT#8);
_GEB_ASSERT_(USI1 = SINT#56);
_GEB_ASSERT_(USI2 = SINT#0);
_GEB_ASSERT_(W1 = 16#0a);
_GEB_ASSERT_(W2 = 16#509);
END_PROGRAM


