Test case R0015
Full test suiteDevice test case
Structures: manipulation and passing as arguments
This test case it part of the test suite proposed for new devices.
Test case ID: R0015
Language: ST
tests2/t0015.st(* checks structs/arrays passing-returning to functions - and assignment *) TYPE POINT: STRUCT X: INT; Y : INT; END_STRUCT; RECT: STRUCT P1: POINT; P2: POINT; END_STRUCT; END_TYPE PROGRAM T0015 VAR pp1,pp2,pp3,pp4: POINT; r1,r2: RECT; END_VAR r1.P1.X := 42; // r1 : [42,0][0,0] (not final) r2 := r1; // this should make a copy // r2 : [42,0][0,0] (not final) r1.P1.X := 15; // r1 : [15,0][0,0] (not final) pp1.X := 10; pp1.Y := 13; // pp1: [10,13] (not final) r2.P2 := pp1; // r2 : [42,0][10,13] (final) pp1.Y := 11; // pp1: [10,11] (not final) _GEB_ASSERT_(pp1.X = 10 AND pp1.Y = 11 ); pp2 := PTRANSPOSE_T0015(pp1,pp4); // ; pp2: [16,10] pp4 : [1,2] _GEB_ASSERT_(pp1.X = 10 AND pp1.Y = 11 ); // the above should not have altered p1 pp1.X := pp1.X * 2; // pp1: [20,11] pp3 := PTRANSPOSE_T0015( pin := pp1, pxx => r1.P2 ); // p3 : [16,20] r1: [15,0][1,2] _GEB_ASSERT_(pp1.X = 20 AND pp1.Y = 11 ); _GEB_ASSERT_(pp2.X = 16 AND pp2.Y = 10 ); _GEB_ASSERT_(pp3.X = 16 AND pp3.Y = 20 ); _GEB_ASSERT_(pp4.X =1 AND pp4.Y= 2 ); _GEB_ASSERT_(r1.P1.X=15 AND r1.P1.Y=0); _GEB_ASSERT_(r1.P2.X=1 AND r1.P2.Y=2 ); _GEB_ASSERT_(r2.P1.X=42 AND r2.P1.Y=0); _GEB_ASSERT_(r2.P2.X=10 AND r2.P2.Y=13 ); END_PROGRAM (* transpose point coordinates and adds 5 to coordinate X *) FUNCTION PTRANSPOSE_T0015: POINT VAR_INPUT pin: POINT; END_VAR VAR_OUTPUT pxx: POINT; // this is always returned as [1,2] END_VAR VAR xx: INT; END_VAR xx := pin.X; PTRANSPOSE_T0015 := pin; PTRANSPOSE_T0015.X := PTRANSPOSE_T0015.Y +5; PTRANSPOSE_T0015.Y := xx ; pxx.X := 1; pxx.Y := 2; END_FUNCTION