! Tests the RMSG host primitive
!
! @author  Neon Ngo
! @version $Id: test_rmsg.txt,v 1.2 2012/07/03 18:19:40 lmt Exp $
!
startmacro u:resTests["numTested"] u:resFails["numFailed"]
  !---------- INITIALIZATION ---------------------------------------------------
  local test_count,fail_count,exp_tab,mytab,mytab2
  res test_count 0
  res fail_count 0

  ! Expected results
  res test_r2t_nk 2
  res test_r2t_k1 SFREQ
  res test_r2t_v1 34.5
  res test_r2t_k2 KEY2
  res test_r2t_v2 "Hello World!"
  res exp_tab "{SFREQ=^test_r2t_v1,KEY2=^test_r2t_v2}


  ! Expected results--for testing H:, h: syntax for subtables
  res test2_r2t_nk 3
  res test2_r2t_k1 CHANGED
  res test2_r2t_v1 {FREQ=FREQ}
  res test2_r2t_k2 SFREQ
  res test2_r2t_v2 34.5
  res test2_r2t_k3 KEY3
  res test2_r2t_v3 "Hello World!"

  !---- for testing H:, h: syntax for subtables
  res hin_tab "{H:CHANGED={FREQ=FREQ},SFREQ=^test2_r2t_v2,KEY3=^test2_r2t_v3}
  res hout_tab "{CHANGED={FREQ=FREQ},SFREQ=^test2_r2t_v2,KEY3=^test2_r2t_v3}

  !---- test Results to Table (R2T) ----
  rmsg R2T ,,,, mytab test_r2t_
  call assert_rexists "RMSG R2T, output table rexists" test_count fail_count mytab
  call assert_str "RMSG R2T, output table=^exp_tab" test_count fail_count exp_tab mytab

  !---- test Table to Results (T2R) ----
  rmsg T2R ,,,, exp_tab test_t2r_
  call assert_num "RMSG T2R, <prefix>_nk (number of key/values)" test_count fail_count test_r2t_nk test_t2r_nk
  call assert_str "RMSG T2R, <prefix>_k1 (  key1)" test_count fail_count  test_r2t_k1 test_t2r_k1
  call assert_str "RMSG T2R, <prefix>_v1 (value1)" test_count fail_count ^test_r2t_v1 test_t2r_v1
  call assert_str "RMSG T2R, <prefix>_k2 (  key2)" test_count fail_count  test_r2t_k2 test_t2r_k2
  call assert_str "RMSG T2R, <prefix>_v2 (value2)" test_count fail_count  test_r2t_v2 test_t2r_v2

  !---- test Results to Table (R2T) for below test with H: syntax ----
  rmsg R2T ,,,, my2tab test2_r2t_
  call assert_rexists "RMSG R2T, output table rexists" test_count fail_count my2tab
  call assert_str "RMSG R2T, output table=^hout_tab" test_count fail_count hout_tab my2tab

  !---- test Table to Results (T2R) with X-Midas H:, h: syntax ----
  rmsg T2R ,,,, hin_tab test2_t2r_
  call assert_num "RMSG T2R TEST2, <prefix>_nk (number of key/values)" test_count fail_count test2_r2t_nk test2_t2r_nk
  call assert_str "RMSG T2R TEST2, <prefix>_k1 (  key1)" test_count fail_count  test2_r2t_k1 test2_t2r_k1
  call assert_str "RMSG T2R TEST2, <prefix>_v1 (value1)" test_count fail_count  test2_r2t_v1 test2_t2r_v1
  call assert_str "RMSG T2R TEST2, <prefix>_k2 (  key2)" test_count fail_count  test2_r2t_k2 test2_t2r_k2
  call assert_str "RMSG T2R TEST2, <prefix>_v2 (value2)" test_count fail_count ^test2_r2t_v2 test2_t2r_v2
  call assert_str "RMSG T2R TEST2, <prefix>_k3 (  key3)" test_count fail_count  test2_r2t_k3 test2_t2r_k3
  call assert_str "RMSG T2R TEST2, <prefix>_v3 (value3)" test_count fail_count  test2_r2t_v3 test2_t2r_v3

  ! double check T2R results output with R2T (symmetric)
  rmsg R2T ,,,, mytab2 test_t2r_
  call assert_str "RMSG T2R -> R2T is symmetric" test_count fail_count exp_tab mytab2

  ! double check R2T results output with T2R (symmetric)
  rmsg T2R ,,,, mytab test_t2rsym_
  call assert_num "RMSG R2T -> T2T is symmetric, number of key/values" test_count fail_count test_t2r_nk test_t2rsym_nk
  call assert_str "RMSG R2T -> T2T is symmetric,   key1" test_count fail_count test_t2r_k1 test_t2rsym_k1
  call assert_str "RMSG R2T -> T2T is symmetric, value1" test_count fail_count test_t2r_v1 test_t2rsym_v1
  call assert_str "RMSG R2T -> T2T is symmetric,   key2" test_count fail_count test_t2r_k2 test_t2rsym_k2
  call assert_str "RMSG R2T -> T2T is symmetric, value2" test_count fail_count test_t2r_v2 test_t2rsym_v2

  !---------- CLEANUP ------------------------------------------------------------------------------
  rem/quiet test_r2t*
  rem/quiet test_t2r*

  res ^resTests test_count
  res ^resFails fail_count
endmacro

!===================================================================================================
include "%xm_assert" ! Includes the assertion subroutines
