Time/date functions and convertions

This test case it part of the test suite proposed for new devices.

Test case ID: R1021
Language: ST

Code:
tests2/t1021.st
(* time-date related functions and conversions *)
PROGRAM T1021
   VAR 

   dt1,dt2:DT;
   t1,t2 : TIME;
   tod1,tod2 : TOD;
   d1,d2 : DATE;
   s1,s2 : STRING;
   r1,r2  : REAL;
   lr1,lr2 : LREAL;
   di : DINT;
   dw : DWORD;
  END_VAR

  dt1 := DT#2015-04-28-00:18:19;
  tod1  := DT_TO_TOD(dt1);
  _GEB_ASSERT_(tod1 = TOD#00:18:19);

  d1  := DT_TO_DATE(dt1);
  _GEB_ASSERT_(d1 = DATE#2015-04-28);

  dt2 := CONCAT_DATE_TOD(d1,tod1);
  _GEB_ASSERT_(dt2 = dt1);

  t1 := TOD_TO_TIME(tod1);  // 1099000 msecs
  _GEB_ASSERT_(t1 = TIME#18m19s);

  di :=  TIME_TO_DINT(t1);
  _GEB_ASSERT_(di = 1099000);

  dw :=  TIME_TO_DWORD(t1); // alias to TIME_TO_DINT
  _GEB_ASSERT_(dw = 1099000);

  t1 := DINT_TO_TIME(di);  
  _GEB_ASSERT_(t1 = TIME#18m19s);

  tod2 := TIME_TO_TOD(t1);  
  _GEB_ASSERT_(tod1 = tod2);

  r1 := TIME_TO_REAL(t1);
  _GEB_ASSERT_EQFLOAT_(r1, 1099000.0);

  t1 := ADD_TIME(t1, TIME#1d1h1m2s345ms);
  t1 := SUB_TIME(t1, TIME#1d1h1m);  // t1 = 1101345
  _GEB_ASSERT_( TIME_TO_DINT(t1) = DINT#1101345);

  tod2 := SUB_TOD_TIME(tod1, TIME#19s);
  _GEB_ASSERT_(tod2 = TOD#00:18:00);

  di:= DATE_TO_DINT(d1); // unix epoch 2015-04-28 = 16553 days
  _GEB_ASSERT_(di = 16553);
  
  d1:= DINT_TO_DATE(di); // 
  _GEB_ASSERT_(d1 = DATE#2015-04-28);

  r1:= DATE_TO_REAL(d1); // unix epoch 2015-04-28 = 16553 days
  _GEB_ASSERT_EQFLOAT_(r1,16553.0);
 
  
   di:= DT_TO_DINT(dt1); // unix epoch secs 2015-04-28-00:18:19;
  _GEB_ASSERT_(di = 1430180299);

   dt2 := DINT_TO_DT(di);
  _GEB_ASSERT_(dt2 = dt1);

   r1:= DT_TO_REAL(dt1); // unix epoch secs 2015-04-28-00:18:19;
  _GEB_ASSERT_EQFLOAT_(r1,  1430180299.0);
  

//  _GEB_MSG_(s1);
      
END_PROGRAM