SubDir TOP tests converter ;

#
# Other converter tests
#

Depends convert-tests : multi_enums.nddl ;
ConvertModel multi_enums.nddl : multi_enums.ddl ;
MakeLocate multi_enums.nddl : [ FDirName $(SUBDIR) output ] ;

#
# Converting Europa Parser ModuleTests
#
# jam convert-module-tests

rule ConvertModuleParserTest {
  local directory = $(1) ;
  local model-nddl = $(2) ;
  local model-ddl = $(3) ;
  local init-nddl = $(4) ;
  local init-ddl = $(5) ;
  local heur-nddl = $(6) ;
  local heur-ddl = $(7) ;
  local nobranch-nddl = $(8) ; # Read from $(7) with heuristics

  Depends convert-module-tests : $(model-nddl:G=$(directory)) ;
  ConvertModel $(model-nddl:G=$(directory)) : $(model-ddl:G=$(directory)) ;
  local rest-nddl = $(init-nddl) ;
  local rest-ddl = $(init-ddl) ;
  while $(rest-nddl) {
    local nddl = $(rest-nddl[1]) ;
    local ddl = $(rest-ddl[1]) ;
    Depends convert-module-tests : $(nddl:G=$(directory)) ;
    ConvertInitialState $(nddl:G=$(directory)) : $(ddl:G=$(directory)) : $(model-ddl:G=$(directory)) ;
    rest-nddl = $(rest-nddl[2-]) ;
    rest-ddl = $(rest-ddl[2-]) ;
  }
  local rest-heur-nddl = $(heur-nddl) ;
  local rest-heur-ddl = $(heur-ddl) ;
  local rest-nobranch = $(nobranch-nddl) ;
  while $(rest-heur-nddl) {
    local hnddl = $(rest-heur-nddl[1]) ;
    local hddl = $(rest-heur-ddl[1]) ;
    local nobr = $(rest-nobranch[1]) ;
    Depends convert-module-tests : $(hnddl:G=$(directory)) ;
    ConvertHeuristics $(hnddl:G=$(directory)) : $(nobr:G=$(directory)) : $(hddl:G=$(directory)) : $(model-ddl:G=$(directory)) ;
    rest-heur-nddl = $(rest-heur-nddl[2-]) ;
    rest-heur-ddl = $(rest-heur-ddl[2-]) ;
    rest-nobranch = $(rest-nobranch[2-]) ;
  }
  SEARCH on $(model-ddl:G=$(directory)) $(init-ddl:G=$(directory)) $(heur-ddl:G=$(directory)) =
    [ FDirName $(EUROPA_ROOT) ModuleTests Parser $(directory) ] ;
  MakeLocate $(model-nddl:G=$(directory)) $(init-nddl:G=$(directory)) $(heur-nddl:G=$(directory)) $(nobranch-nddl:G=$(directory)) :
    [ FDirName $(SUBDIR) $(directory) ] ;    
}

#ConvertModuleParserTest dnp : DNP.nddl : DNP.compats.ddl : timeline.nddl : timeline.init : heurNDDL : heurDDL : nobrNDDL ;
ConvertModuleParserTest dnp : DNP.nddl : DNP.compats.ddl : DNP.timeline.nddl : timeline.init : DNPheur2.xml : dnp.heur2 : DNPnobr2 ;

ConvertModuleParserTest dnp2 : DNP2.nddl : DNP.compats.ddl :
  allDSS.nddl fourFreeObs.nddl DNP2.timeline.nddl :
  allDSS.init fourFreeObs.init timeline.init :
  DNP2heur.xml DNP2heur3.xml : dnp.heuristics dnp.heur3 : DNP2nobr DNP2nobr3 ;

ConvertModuleParserTest dnp3 : DNP3.nddl : DNP.compats.ddl : 
  DNP3.fourFreeObs.nddl fourFreeObs-initBufNotEmpty.nddl freeObs.nddl freeObs.noEmpty.nddl tenFreeObs.nddl threeFreeObs.nddl DNP3.timeline.nddl twentyFreeObs.nddl twoFreeObs.nddl :
  fourFreeObs.init fourFreeObs.initBufNotEmpty.init freeObs.init freeObs.noEmpty.init tenFreeObs.init threeFreeObs.init timeline.init twentyFreeObs.init twoFreeObs.init :
  DNP3heur.xml : dnp.heuristics : DNP3nobr ;

# eos does not parse

ConvertModuleParserTest gnats : C3.nddl : C3.ddl : C3-init.nddl : C3.init ;
ConvertModuleParserTest gnats : condasame.nddl : condasame.ddl : condasame-init.nddl : condasame.init ;
ConvertModuleParserTest gnats : NoBranchBug.nddl : NoBranchBug.ddl : NoBranchBug-init.nddl : NoBranchBug.init : NoBranchBug.xml : NoBranchBug.heur : NoBranchBug.nobr ;
ConvertModuleParserTest gnats : P4-C3.nddl : P4-C3.ddl : P4-C3-init.nddl : P4C3.init ;
ConvertModuleParserTest gnats : P4-C3eq.nddl : P4-C3eq.ddl : P4-C3eq-init.nddl : P4C3.init ;
ConvertModuleParserTest gnats : rover-fixed.nddl : rover-fixed.ddl : rover-fixed-init.nddl : rover-fixed.init ;
ConvertModuleParserTest gnats : SC.nddl : SC.ddl : SC-init.nddl : SC.init ;
ConvertModuleParserTest gnats : sum.nddl : sum.ddl : sum-init.nddl : sum.init ;

                        #dir  nddl model  ddl model
ConvertModuleParserTest mer : mer.nddl : mer.model.ddl :
  #nddl initial states
  mer-1.nddl mer-bill.nddl mer-bill-2.nddl mer-idd1.nddl mer-idd2.nddl mer-idd3.nddl mer-pma-comm.nddl mer-pma1.nddl mer-pma2.nddl
    R1-files-p1.nddl R1-files-p2.nddl R1-files-p3.nddl
    R2-files-R21-Bill.nddl R2-files-R21-IDD1.nddl R2-files-R21-IDD2.nddl R2-files-R21-IDD3.nddl R2-files-R21-PMA1.nddl R2-files-R21-PMA2.nddl :
 #ddl initial states
  mer-1.init mer-bill.init mer-bill-2.init mer-idd1.init mer-idd2.init mer-idd3.init mer-pma-comm.init mer-pma1.init mer-pma2.init
    [ FDirName R1-files p1.init ] [ FDirName R1-files p2.init ] [ FDirName R1-files p3.init ] 
    [ FDirName R2-files R21-Bill.init ] [ FDirName R2-files R21-IDD1.init ] [ FDirName R2-files R21-IDD2.init ] [ FDirName R2-files R21-IDD3.init ]
    [ FDirName R2-files R21-PMA1.init ] [ FDirName R2-files R21-PMA2.init ] :
  #heuristic xml destinations
  mer-heur-high.xml mer-p1-3.xml :
  #heuristic source files
  mer-heur-high.txt [ FDirName R1-files p1-3.heur.txt ] :
  #nobranch files
  mer-heur-high.nobr mer-p1-3.nobr ;

# NewPlan/ModuleTests/Parser/mer2 skipped, at least for now.

ConvertModuleParserTest monkey : monkey.nddl : monkey-compats.ddl :
  timeline0.nddl timeline-hacked.nddl timeline-hacked2.nddl timeline-hacked3.nddl :
  timeline.init timeline.init.hacked timeline.init.hacked2 timeline.init.hacked3 :
  monkeyNewHeur.xml monkeyExtendedHeur.xml :
  monkey.newheur monkey.extended.newheur :
  monkeyNewHeur.nobr monkeyExtendedHeur.nobr ;

ConvertModuleParserTest monkey1 : monkey1.nddl : monkey-compats.ddl :
  timeline1.nddl timeline-twomonkeys.nddl :
  timeline.init timeline.twomonkeys :
  twoMonkeyHeur.xml : twoMonkey.heur : twoMonkey.nobr ;

ConvertModuleParserTest monkey1 : monkey-objvar.nddl : monkey-compats.objvar.ddl :
  timeline-objvar.nddl timeline-twomonkeys-objvar.nddl :
  timeline.init timeline.twomonkeys ;

ConvertModuleParserTest monkey2 : monkey2.nddl : monkey.ddl :
  timeline2.nddl timeline22.nddl timeline23.nddl :
  timeline.init timeline2.init timeline3.init ;

# monkey3 used a generator constraint and is no longer a valid Europa1 model.

ConvertModuleParserTest robot : robot.nddl : robot.ddl :
  req1.nddl req1.nddl :
  req1.init req3.init ;

local name ;
#for name in multrover rover rover2 rover2a rover2b rover3 rover4 {
for name in multrover rover rover3 rover4 {
  ConvertModuleParserTest rover : $(name).nddl : $(name).ddl : $(name)-test.nddl : test.init ;
}
