!******************************************************************************!
! Test miscellaneous timeline propagation cases in a pipe and out of a pipe
! that are just file-operation-file, both with current DEFAULT=-4096 
! grow-as-needed and with TLL=128 wrapping
! 1) THIN that actually thins
! 2) FCALC that keeps same size, but FCALC adds an entry for last element
! 3) using TRIMMERs on the input file
!
! Arguments: keep, debug
!
! Include:   test_timeline_propagation.inc has procedures used by this test
!
! @bug       NXM-3637 Wrapped BLUE TC timelines only writing entries since wrap
!                     Wrapped usec TIMELINE writing entries out in buffer order
!                       even when wrap is in the middle
!            NXM-3638 Timelines need to be properly propagated when in a pipe
!            NXM-3639 Nextmidas does not propagate time hacks properly - file-to-file > 128 hacks
!
! Note: At this time, this test will occasionally fail due to timelinetester not always
!       generating the same # of time hacks (random jitter issue)
!
! @since     NeXtMidas 3.9.4
! @author :  Jeanette McCall

!******************************************************************************!
startmacro
  switch KEEP        keep     GET DEF=FALSE SDEF=TRUE
  switch DEBUG       debug    GET DEF=FALSE SDEF=TRUE

  global tcstattable
  global platstattable

  ! Which set of test to perform (or both)
  res micro_time true
  res tc_time true
  res plat_time true

  ! file names of starter/initial files 
  set testfile_usec_timeline   "test1000_timeline_xstart2.tmp"
  set testfile_tc_timeline     "test1000_temp_TC.tmp"
  set testfile_plat_timeline   "test1000_temp_plat.cdif"

  ! file names of files with propagated timeline keywords
  set thin_2_usec_pipe_propagation          "thin2_timeline1000blue.tmp"

  set thin_2_tc_pipe_propagation_wrap       "thin2_wrap_pipe_timeline1000blueTC.tmp"
  set thin_2_tc_pipe_propagation            "thin2_pipe_timeline1000blueTC.tmp"
  set fcalc_tc_pipe_propagation             "fcalc_tc_output_pipe.tmp"
  set fcalc_tc_pipe_propagation_wrap        "fcalc_tc_output_pipe_wrap.tmp"
  set trim_tc_pipe_propagation_wrap         "trim_wrap_pipe_tc_timeline.tmp"
  set thin_2_tc_propagation_new_default     "thin2_new_default_timeline1000blueTC.tmp"
  set thin_2_tc_propagation                 "thin2_timeline1000blueTC.tmp"
  set fcalc_tc_propagation                  "fcalc_tc_output.tmp"

  set thin_2_plat_pipe_propagation_wrap     "thin2_wrap_pipe_timeline1000plat.cdif"
  set thin_2_plat_pipe_propagation          "thin2_pipe_timeline1000plat.cdif"
  set fcalc_plat_pipe_propagation           "fcalc_plat_output_pipe.cdif"
  set fcalc_plat_pipe_propagation_wrap      "fcalc_plat_output_pipe_wrap.cdif"
  set trim_plat_pipe_propagation_wrap       "trim_wrap_pipe_plat_timeline.cdif"
  set thin_2_plat_propagation_new_default   "thin2_new_default_timeline1000plat.cdif"
  set thin_2_plat_propagation               "thin2_timeline1000plat.cdif"
  set fcalc_plat_propagation                "fcalc_plat_output.cdif"

  ! make all the expected calculations and generate the initial files
  res Z:alwaysRefreshFiles false
  call setupForTimelinePropagationTest "^testfile_usec_timeline" "^testfile_tc_timeline" "^testfile_plat_timeline" alwaysRefreshFiles
  res  numHacksSkipped 4
  calc startElem  elemPerTimestamp numHacksSkipped *
  res  thinFactor 2

  say ""
  INFO "\n^reg.main.name"
  INFO "At this time, it is expected to see multiple 'This TimeLine buffer is full' warnings during this test"

  pipe on

    ! Tests with BLUE microsecond TIMELINE
    if micro_time then
      say "TODO:**** uSec TIMELINE tests need to be added *****"

    endif

    ! Tests with BLUE high precision TC Keywords
    if tc_time then

      thin/tl=1/id=ttcwrap testfile_tc_timeline thin_2_tc_pipe_propagation_wrap{TLL=128} INC=thinFactor
      thin/tl=1/id=ttc  testfile_tc_timeline thin_2_tc_pipe_propagation INC=thinFactor
      fcalc/tl=1/id=ftc fcalc_tc_pipe_propagation testfile_tc_timeline 1 *
      fcalc/tl=1/id=ftcwrap fcalc_tc_pipe_propagation_wrap{TLL=128} testfile_tc_timeline 1 *
      noop/tl=1/id=ntcwrap  testfile_tc_timeline(^startElem:^numElem) trim_tc_pipe_propagation_wrap{TLL=128}

    endif

    ! Tests with PLATINUM high precision
    if plat_time then

      ! For now, the platinum tests with wrapped timelines are being skipped because the following error is being thrown:"
      ! WARN: ERROR: Invalid TimeLine entry that occurs later in the timeline, but is back in time - Offset - Current:130560.0 Previous:130560.0
      !   Time- Current:2010:03:13::02:43:50.400422096 Previous:2010:03:13::04:32:12.800702095
      ! See NXM-3698 - will need to be addressed sometime in the future

      !thin/tl=1/id=tplatwrap testfile_plat_timeline thin_2_plat_pipe_propagation_wrap{TLL=128} INC=thinFactor
      thin/tl=1/id=tplat  testfile_plat_timeline thin_2_plat_pipe_propagation INC=thinFactor
      fcalc/tl=1/id=fplat fcalc_plat_pipe_propagation testfile_plat_timeline 1 *
      !fcalc/tl=1/id=fplatwrap fcalc_plat_pipe_propagation_wrap{TLL=128} testfile_plat_timeline 1 *
      !noop/tl=1/id=nplatwrap  testfile_plat_timeline(^startElem:^numElem) trim_plat_pipe_propagation_wrap{TLL=128}

    endif

  pipe off

  !******************************************************************************
  ! Check the resulting timeline keywords from all File -> OPERATION -> FILE propagation
  !  1) against both desired and current behavior
  !  2) TimeLine.Format
  !  3) First and last time hack
  !  4) Number of time hacks
  !******************************************************************************

    ! NeXtMidas TIMELINE
    if micro_time then
      say ""
      info "TIMELINE uSec PRECISION CHECKS ----------"
      say "TODO:**** uSec TIMELINE checks need to be added *****"

    endif

    ! TC timeline
    if tc_time then
      res  l:last1to1 nEntries
      calc l:lastfft  last1to1 2 /
      res  valuelast  40897
      res lastfft

      say ""
      info "TC HIGH PRECISION CHECKS ----------"

      say ""
      info "TLL=128 THIN ^thinFactor IN PIPE CHECKS - BLUE_HIGH_PRECISION"
      calc l:intLastHackOffset lastHack1 thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      calc l:intFirstOffExpected firstHackWrap 2 / 0.5 +
      res  d:firstOffExpected intFirstOffExpected
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstOffExpected,LAST_OFFSET=^lastHackOffset}
      table tcstattable create
      %timeline_stats thin_2_tc_pipe_propagation_wrap  tcstattable
      call checkTablesSame desired tcstattable FALSE "TLL=128 THIN ^thinFactor in pipe matches desired and expected behavior"

      say ""
      info "THIN ^thinFactor IN PIPE CHECKS - BLUE_HIGH_PRECISION"
      calc l:intLastHackOffset lastHack1 thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^nEntries,FIRST_OFFSET=1.0,LAST_OFFSET=^lastHackOffset}
      table tcstattable create
      %timeline_stats thin_2_tc_pipe_propagation  tcstattable
      call checkTablesSame desired tcstattable FALSE "THIN ^thinFactor in pipe matches expected and desired behavior"

      say ""
      info "TLL=128 FCALC IN PIPE CHECKS - BLUE_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem 1 +
      calc firstHackFCALC lastHackFCALC numElemBackWrap -
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstHackFCALC,LAST_OFFSET=^lastHackFCALC}
      table tcstattable create
      %timeline_stats fcalc_tc_pipe_propagation_wrap  tcstattable
      call checkTablesSame desired tcstattable FALSE "TLL=128 FCALC in pipe matches expected and desired behavior"
      calc L:sampLastOrig num_wrap 1 -
      key fcalc_tc_pipe_propagation_wrap GET TCSAMPLE_^sampLastOrig nextLastOffFCALC
      assert/text="^reg.main.name: TLL=128 FCALC in pipe next to last time hack matches last in original file" lastHack1 EQ nextLastOffFCALC

      say ""
      info "FCALC IN PIPE CHECKS - BLUE_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem 1 +
      calc fcalcEntries nEntries 1 +
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^fcalcEntries,FIRST_OFFSET=1.0,LAST_OFFSET=^lastHackFCALC}
      table tcstattable create
      %timeline_stats fcalc_tc_pipe_propagation  tcstattable
      call checkTablesSame desired tcstattable FALSE "FCALC in pipe matches expected and desired behavior"

      say ""
      info "TLL=128 NOOP with TRIMMERS IN PIPE CHECKS - BLUE_HIGH_PRECISION"
      calc lastHackOffset lastHack1 startElem -
      calc firstHackOffset lastHackOffset numElemBackWrap -
      res t:expected {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstHackOffset,LAST_OFFSET=^lastHackOffset}
      table tcstattable create
      %timeline_stats trim_tc_pipe_propagation_wrap  tcstattable
      call checkTablesSame expected tcstattable FALSE "TLL=128 NOOP with TRIMMERS in pipe matches desired behavior"

      say ""
      invoke origTll nxm.sys.lib.TimeLine.getHighPrecisionAllocDefault()
      res newTll 256
      invoke nxm.sys.lib.TimeLine.setHighPrecisionAllocDefault(newTll)
      info "NEW GLOBAL DEFAULT THIN ^thinFactor OUTSIDE PIPE - BLUE_HIGH_PRECISION"
      thin/tl=1 testfile_tc_timeline thin_2_tc_propagation_new_default INC=^thinFactor
      info "NEW GLOBAL DEFAULT THIN ^thinFactor OUTSIDE PIPE CHECKS"
      calc l:intLastHackOffset lastHack1 thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      calc l:intFirstOffExpected firstHackWrapNewDefault 2 / 0.5 +
      res  d:firstOffExpected intFirstOffExpected
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^numWrapNewDefault,FIRST_OFFSET=^firstOffExpected,LAST_OFFSET=^lastHackOffset}
      table tcstattable create
      %timeline_stats thin_2_tc_propagation_new_default  tcstattable
      call checkTablesSame desired tcstattable FALSE "NEW GLOBAL DEFAULT THIN ^thinFactor outside pipe matches expected and desired behavior"
      invoke nxm.sys.lib.TimeLine.setHighPrecisionAllocDefault(origTll)

      say ""
      info "THIN ^thinFactor OUTSIDE PIPE - BLUE_HIGH_PRECISION"
      thin/tl=1 testfile_tc_timeline thin_2_tc_propagation INC=^thinFactor
      info "THIN ^thinFactor OUTSIDE PIPE CHECKS"
      calc l:intLastHackOffset lastHack1 thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^nEntries,FIRST_OFFSET=1.0,LAST_OFFSET=^lastHackOffset}
      table tcstattable create
      %timeline_stats thin_2_tc_propagation  tcstattable
      call checkTablesSame desired tcstattable FALSE "THIN ^thinFactor outside pipe matches expected and desired behavior"

      say ""
      info "FCALC OUTSIDE PIPE - BLUE_HIGH_PRECISION"
      fcalc/tl=1 fcalc_tc_propagation testfile_tc_timeline 1 *
      info "FCALC OUTSIDE PIPE CHECKS - BLUE_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem 1 +
      calc fcalcEntries nEntries 1 +
      res t:desired  {FORMAT=BLUE_HIGH_PRECISION,L:NUM_ENTRIES=^fcalcEntries,FIRST_OFFSET=1.0,LAST_OFFSET=^lastHackFCALC}
      table tcstattable create
      %timeline_stats fcalc_tc_propagation  tcstattable
      call checkTablesSame desired tcstattable FALSE "FCALC outside pipe matches expected and desired behavior"

    endif

    ! PLATINUM timeline
    if plat_time then
      calc l:last1to1 nEntries 1 -
      calc l:lastfft  nEntries 2 / 1 -
      res  valuelast  40896
      res lastfft

      say ""
      info "PLATINUM HIGH PRECISION CHECKS ----------"

      say ""
      info "TLL=128 THIN ^thinFactor IN PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      calc l:intLastHackOffset lastHackPlat thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      calc l:intFirstOffExpected firstHackWrapPlat 2 / 0.5 +
      res  d:firstOffExpected intFirstOffExpected
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstOffExpected,LAST_OFFSET=^lastHackOffset}
      table platstattable create
      !%timeline_stats thin_2_plat_pipe_propagation_wrap  platstattable
      !call checkTablesSame desired platstattable FALSE "TLL=128 THIN ^thinFactor in pipe matches desired and expected behavior"

      say ""
      info "THIN ^thinFactor IN PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      calc l:intLastHackOffset lastHackPlat thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^nEntries,FIRST_OFFSET=0.0,LAST_OFFSET=^lastHackOffset}
      table platstattable create
      %timeline_stats thin_2_plat_pipe_propagation  platstattable
      call checkTablesSame desired platstattable FALSE "THIN ^thinFactor in pipe matches expected and desired behavior"

      say ""
      info "TLL=128 FCALC IN PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem
      calc firstHackFCALC lastHackFCALC numElemBackWrapPlat -
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstHackFCALC,LAST_OFFSET=^lastHackFCALC}
      table platstattable create
      !%timeline_stats fcalc_plat_pipe_propagation_wrap  platstattable
      !call checkTablesSame desired platstattable FALSE "TLL=128 FCALC in pipe matches expected and desired behavior"

      say ""
      info "FCALC IN PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem
      calc fcalcEntries nEntries 1 +
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^fcalcEntries,FIRST_OFFSET=0.0,LAST_OFFSET=^lastHackFCALC}
      table platstattable create
      %timeline_stats fcalc_plat_pipe_propagation  platstattable
      call checkTablesSame desired platstattable FALSE "FCALC in pipe matches expected and desired behavior"

      say ""
      info "TLL=128 NOOP with TRIMMERS IN PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      calc lastHackOffset lastHack0 startElem -
      calc firstHackOffset lastHackOffset numElemBackWrapPlat -
      res t:expected {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^num_wrap,FIRST_OFFSET=^firstHackOffset,LAST_OFFSET=^lastHackOffset}
      table platstattable create
      !%timeline_stats trim_plat_pipe_propagation_wrap  platstattable
      !call checkTablesSame expected platstattable FALSE "TLL=128 NOOP with TRIMMERS in pipe matches desired behavior"

      say ""
      invoke origTll nxm.sys.lib.TimeLine.getHighPrecisionAllocDefault()
      res newTll 256
      invoke nxm.sys.lib.TimeLine.setHighPrecisionAllocDefault(newTll)
      info "NEW GLOBAL DEFAULT THIN ^thinFactor OUTSIDE PIPE - PLATINUM_HIGH_PRECISION"
      thin/tl=1 testfile_plat_timeline thin_2_plat_propagation_new_default INC=^thinFactor
      info "NEW GLOBAL DEFAULT THIN ^thinFactor OUTSIDE PIPE CHECKS"
      calc l:intLastHackOffset lastHackPlat thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      calc l:intFirstOffExpected firstHackWrapPlatNewDefault 2 / 0.5 +
      res  d:firstOffExpected intFirstOffExpected
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^numWrapNewDefault,FIRST_OFFSET=^firstOffExpected,LAST_OFFSET=^lastHackOffset}
      table platstattable create
      !%timeline_stats thin_2_plat_propagation_new_default  platstattable
      !call checkTablesSame desired platstattable FALSE "NEW GLOBAL DEFAULT THIN ^thinFactor outside pipe matches expected and desired behavior"
      invoke nxm.sys.lib.TimeLine.setHighPrecisionAllocDefault(origTll)

      say ""
      info "THIN ^thinFactor OUTSIDE PIPE - PLATINUM_HIGH_PRECISION"
      thin/tl=1 testfile_plat_timeline thin_2_plat_propagation INC=^thinFactor
      info "THIN ^thinFactor OUTSIDE PIPE CHECKS"
      calc l:intLastHackOffset lastHack0 thinFactor / 0.5 +
      res  d:lastHackOffset intLastHackOffset
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^nEntries,FIRST_OFFSET=0.0,LAST_OFFSET=^lastHackOffset}
      table platstattable create
      %timeline_stats thin_2_plat_propagation  platstattable
      call checkTablesSame desired platstattable FALSE "THIN ^thinFactor outside pipe matches expected and desired behavior"

      say ""
      info "FCALC OUTSIDE PIPE - PLATINUM_HIGH_PRECISION"
      fcalc/tl=1 fcalc_plat_propagation testfile_plat_timeline 1 *
      info "FCALC OUTSIDE PIPE CHECKS - PLATINUM_HIGH_PRECISION"
      info "Note: FCALC has interesting behavior of adding a time hack for the last element, so one extra"
      calc lastHackFCALC ^numElem
      calc fcalcEntries nEntries 1 +
      res t:desired  {FORMAT=PLATINUM_HIGH_PRECISION,L:NUM_ENTRIES=^fcalcEntries,FIRST_OFFSET=0.0,LAST_OFFSET=^lastHackFCALC}
      table platstattable create
      %timeline_stats fcalc_plat_propagation  platstattable
      call checkTablesSame desired platstattable FALSE "FCALC outside pipe matches expected and desired behavior"

    endif

    call cleanupTimeLinePropagationFiles

endmacro

!******************************************************************************!
! Main process message for this macro. Should be right after the ENDMACRO.
!******************************************************************************!
procedure processMessage m:msg
  if msg.name eqs "MAIN" then
    assert/text="^reg.main.name: User indicated tests" msg.data eqss "PASS"
    pipe stop
  else
    say "Unhandled message name: ^msg.name from fid: ^msg.fid data: ^msg.data"
  endif
return

!******************************************************************************!
! If an unexpected exception is caught, mark test as failed, unless it is expected
!******************************************************************************!
procedure processException m:emsg
  if expectedException REXISTS then
    assert/text="^reg.main.name: Expected ERROR starts with: ^{expectedException}" expectedException EQSS emsg.data.message
    remove expectedException
  else
    assert/text="^reg.main.name: Caught unexpected exception ^{emsg.data}" "FALSE" isTrue
    if "Trace" SUBS ENV.DEBUG then invoke ,, emsg.data.printStackTrace()
  endif
return

!******************************************************************************!
! Cleanup files generated, unless we are keeping them for reference
!******************************************************************************!
procedure cleanupTimeLinePropagationFiles

  ! cleanup test files (if user did not added switch to keep test files)
  if keep isFalse then
    IF testfile_usec_timeline              FEXISTS THEN ERASE testfile_usec_timeline
    IF testfile_tc_timeline                FEXISTS THEN ERASE testfile_tc_timeline
    IF testfile_plat_timeline              FEXISTS THEN ERASE testfile_plat_timeline

    IF thin_2_usec_pipe_propagation        FEXISTS THEN ERASE thin_2_usec_pipe_propagation

    IF thin_2_tc_pipe_propagation_wrap     FEXISTS THEN ERASE thin_2_tc_pipe_propagation_wrap
    IF thin_2_tc_pipe_propagation          FEXISTS THEN ERASE thin_2_tc_pipe_propagation
    IF fcalc_tc_pipe_propagation           FEXISTS THEN ERASE fcalc_tc_pipe_propagation
    IF fcalc_tc_pipe_propagation_wrap      FEXISTS THEN ERASE fcalc_tc_pipe_propagation_wrap
    IF trim_tc_pipe_propagation_wrap       FEXISTS THEN ERASE trim_tc_pipe_propagation_wrap
    IF thin_2_tc_propagation_new_default   FEXISTS THEN ERASE thin_2_tc_propagation_new_default
    IF thin_2_tc_propagation               FEXISTS THEN ERASE thin_2_tc_propagation
    IF fcalc_tc_propagation                FEXISTS THEN ERASE fcalc_tc_propagation

    IF thin_2_plat_pipe_propagation_wrap   FEXISTS THEN ERASE thin_2_plat_pipe_propagation_wrap
    IF thin_2_plat_pipe_propagation        FEXISTS THEN ERASE thin_2_plat_pipe_propagation
    IF fcalc_plat_pipe_propagation         FEXISTS THEN ERASE fcalc_plat_pipe_propagation
    IF fcalc_plat_pipe_propagation_wrap    FEXISTS THEN ERASE fcalc_plat_pipe_propagation_wrap
    IF trim_plat_pipe_propagation_wrap     FEXISTS THEN ERASE trim_plat_pipe_propagation_wrap
    IF thin_2_plat_propagation_new_default FEXISTS THEN ERASE thin_2_plat_propagation_new_default
    IF thin_2_plat_propagation             FEXISTS THEN ERASE thin_2_plat_propagation
    IF fcalc_plat_propagation              FEXISTS THEN ERASE fcalc_plat_propagation

  else
    info "Not erasing these files: ^{testfile_usec_timeline},^{testfile_tc_timeline},^{testfile_plat_timeline},^{thin_2_usec_pipe_propagation},&
         ^{thin_2_tc_pipe_propagation_wrap},^{thin_2_tc_pipe_propagation},^{fcalc_tc_pipe_propagation},&
         ^{fcalc_tc_pipe_propagation_wrap},^{trim_tc_pipe_propagation_wrap},&
         ^{thin_2_tc_propagation_new_default},^{thin_2_tc_propagation},^{fcalc_tc_propagation}&
         ^{thin_2_plat_pipe_propagation_wrap},^{thin_2_plat_pipe_propagation},^{fcalc_plat_pipe_propagation},&
         ^{fcalc_plat_pipe_propagation_wrap},^{trim_plat_pipe_propagation_wrap},&
         ^{thin_2_plat_propagation_new_default},^{thin_2_plat_propagation},^{fcalc_plat_propagation}"
  endif
return
!******************************************************************************!
! Include procedures common to test_timeline_propagation test:
! setupForTimelinePropagationTest and checkTablesSame
!******************************************************************************!
include "test_timeline_propagation.inc"
