test [store_locations], and try to characterize [find_path]

This commit is contained in:
Chris Beck 2014-05-27 20:28:05 -04:00
parent cad6edf182
commit 6cb367594b
4 changed files with 2092 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,405 @@
### Change GENERATE_ANSWERS to 1 in the next line to generate the correct answers for the characterization test.
### The list of answers will appear in console when you run wesnoth, after debug: messages.
### Copy the lines to a text file ("foo") and use the following sed script to clean them,
###
### sed -n 's/^.*: \([ [:digit:]]*\) ,/\1/p' <foo | tr '\n' ','
###
### so you get a nice comma separated list. Then paste it below to GENERATED_ANSWERS, and change GENERATE_ANSWERS to 0 again.
#define GENERATE_ANSWERS
1
#enddef
#define GENERATED_ANSWERS
3,3,1,11,16,2,16,22,3,23,30,4,34,48,6,25,40,5,26,47,6,18,28,4,7,7,1,31,36,4,7,12,2,34,40,6,23,38,5,1,6,1,30,47,7,23,29,5,13,26,4,9,10,2,4,14,2,28,44,7,13,21,3,3,3,1,0,0,0,9,11,2,23,30,5,5,12,2,24,35,7,39,59,10,38,45,8,28,32,7,37,53,11,40,48,8,41,49,9,32,39,8,35,48,8,38,46,8,39,59,12,32,39,7,23,32,8,11,11,3,16,26,6,22,32,8,12,16,4,13,20,5,34,44,11,41,52,11,45,51,11,33,41,9,37,54,8,29,38,6,17,21,3,46,62,11,42,53,8,34,38,6,26,47,6,20,32,4,16,16,2,29,50,5,26,37,4,35,41,5,51,62,7,54,61,7,17,21,3,12,14,2,18,25,5,15,18,3,13,16,3,41,45,7,28,32,4,20,22,4,31,32,4,37,41,6,49,51,7,0,30,48,6,34,36,4,43,47,6,15,16,2,36,40,5,18,36,4,29,32,4,13,18,2,6,7,1,32,45,8,22,36,6,27,40,6,14,21,4,14,14,3,9,9,2,21,32,8,44,50,13,0,0,0,38,44,7,32,32,5,29,40,8,45,54,9,28,34,6,39,47,8,39,47,10,7,9,2,37,43,8,24,31,6,12,28,4,39,50,9,42,44,7,23,32,4,27,33,5,35,36,6,37,40,6,39,49,7,44,51,8,39,50,8,29,31,6,4,5,1,19,28,4,21,21,3,24,25,4,22,23,4,40,47,8,20,21,4,46,47,7,10,16,2,16,18,3,8,10,2,10,11,2,19,21,3,15,35,5,55,64,11,49,66,11,26,34,6,7,8,2,16,18,2,15,27,3,11,12,2,11,28,5,6,6,1,32,44,7,41,52,8,29,42,6,25,32,6,20,22,4,21,30,5,22,23,4,38,43,8,27,40,8,25,33,6,32,45,8,32,33,7
#enddef
#define IF_GEN_ANS T E
[if]
{VARIABLE_CONDITIONAL GEN_ANS equals 1}
[then]
{T}
[/then]
[else]
{E}
[/else]
[/if]
#enddef
#define SPLIT_COMMA_LIST LIST VAR
[set_variables]
name={VAR}
[split]
list={LIST}
key=val
separator=","
remove_empty=no
[/split]
[/set_variables]
#enddef
#define CHECK_ANSWER X
{IF_GEN_ANS
({VARIABLE observed_answer ${X}}
[wml_message]
message="$observed_answer ,"
logger=debug
to_chat=false
[/wml_message])
({VARIABLE current_answer $answers[$answer_counter|].val|}
{VARIABLE observed_answer ${X}}
[wml_message]
message="$current_answer , $observed_answer"
logger=debug
to_chat=false
[/wml_message]
{ASSERT ({VARIABLE_CONDITIONAL observed_answer equals $current_answer}) }
)
}
{VARIABLE_OP answer_counter add 1}
#enddef
#define INIT_ANSWERS
{VARIABLE answer_counter 0}
{VARIABLE answers_list ("{GENERATED_ANSWERS}")}
{SPLIT_COMMA_LIST $answers_list answers}
[wml_message]
message="Parsed: $answers.length| answers"
logger=debug
to_chat=false
[/wml_message]
#enddef
#define FORMAT ARRAY VARIABLE
{VARIABLE_OP {VARIABLE} to_variable {ARRAY}.{VARIABLE}}
#enddef
#put {NEXT INDEX} after it
#define FOREACH_FORMAT ARRAY INDEX
{FOREACH {ARRAY} {INDEX}}
{FORMAT {ARRAY}[${INDEX}] x}
{FORMAT {ARRAY}[${INDEX}] y}
#enddef
#define TEST_PATHFIND SRC DST
[find_path]
[traveler]
{SRC}
[/traveler]
[destination]
{DST}
[/destination]
allow_multiple_turns=yes
variable=path
[/find_path]
{VARIABLE nhexes $path.hexes}
{CHECK_ANSWER nhexes}
{IF_VAR nhexes equals 0 (
[then]
#[wml_message]
# message="got no paths {SRC} {DST}"
# logger=error
# to_chat=false
#[/wml_message]
[/then]
[else]
{CHECK_ANSWER path.movement_cost}
{CHECK_ANSWER path.required_turns}
{FOREACH path.steps step}
{CHECK_ANSWER (path.steps[$step|].x)}
{CHECK_ANSWER (path.steps[$step|].y)}
{NEXT step}
[/else]
)}
#enddef
#define TEST_PATHFIND_WITH_OPTS SRC DST ALLOW_MULTIPLE_TURNS CHECK_VISIBILITY CHECK_TELEPORT CHECK_ZOC
[find_path]
[traveler]
{SRC}
[/traveler]
[destination]
{DST}
[/destination]
variable=path
allow_multiple_turns = {ALLOW_MULTIPLE_TURNS}
check_visibility = {CHECK_VISIBILITY}
check_teleport = {CHECK_TELEPORT}
check_zoc = {CHECK_ZOC}
[/find_path]
{CHECK_ANSWER path.movement_cost}
{CHECK_ANSWER path.required_turns}
{FOREACH path.steps step}
{CHECK_ANSWER "path.steps[$step|].x"}
{CHECK_ANSWER "path.steps[$step|].y"}
{NEXT step}
#enddef
#define TEST_NEXT_UNIT TEST_MACRO DST
[store_locations]
{DST}
variable=tmp
[/store_locations]
[if]
[have_unit]
{DST}
[/have_unit]
[then]
[wml_message]
message="Destination {DST} was occupied!"
logger=error
to_chat=false
[/wml_message]
[/then]
[else]
[if]
{VARIABLE_CONDITIONAL tmp.terrain contains "X"}
[then]
[wml_message]
message="Destination {DST} was impassable!"
logger=error
to_chat=false
[/wml_message]
[/then]
[else]
{VARIABLE ID $units[$unit_counter|].id|}
{{TEST_MACRO} (id=$ID) ({DST})}
{VARIABLE_OP unit_counter add 1}
[/else]
[/if]
[/else]
[/if]
#enddef
#define MAKE_TEST ID MACRO
[test]
name="Unit Test {ID}"
id={ID}
{test/maps/pathfind_1.cfg}
[event]
name = side 1 turn 1
first_time_only=yes
{VARIABLE GEN_ANS {GENERATE_ANSWERS}}
{INIT_ANSWERS}
[store_unit]
[filter]
[/filter]
variable=units
[/store_unit]
{VARIABLE unit_counter 0}
[wml_message]
message="$units.length| units"
logger=debug
to_chat=false
[/wml_message]
{TEST_NEXT_UNIT {MACRO} (x,y=9,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=42,16)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=33,27)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,5)}
{TEST_NEXT_UNIT {MACRO} (x,y=5,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=23,15)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,39)}
{TEST_NEXT_UNIT {MACRO} (x,y=31,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,12)}
{TEST_NEXT_UNIT {MACRO} (x,y=18,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=16,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=39,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,36)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,19)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=6,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,1)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,6)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,4)}
{TEST_NEXT_UNIT {MACRO} (x,y=9,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=42,16)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=33,27)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,5)}
{TEST_NEXT_UNIT {MACRO} (x,y=5,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=23,15)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,39)}
{TEST_NEXT_UNIT {MACRO} (x,y=31,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,12)}
{TEST_NEXT_UNIT {MACRO} (x,y=18,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,17)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,14)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=32,3)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,36)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,19)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=6,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,1)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,6)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,4)}
{TEST_NEXT_UNIT {MACRO} (x,y=9,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=42,16)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=33,27)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,5)}
{TEST_NEXT_UNIT {MACRO} (x,y=5,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=23,15)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,39)}
{TEST_NEXT_UNIT {MACRO} (x,y=31,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,12)}
{TEST_NEXT_UNIT {MACRO} (x,y=18,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=16,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=39,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,36)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,19)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=6,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,1)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,6)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,4)}
{TEST_NEXT_UNIT {MACRO} (x,y=9,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=42,16)}
{TEST_NEXT_UNIT {MACRO} (x,y=10,11)}
{TEST_NEXT_UNIT {MACRO} (x,y=33,27)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,5)}
{TEST_NEXT_UNIT {MACRO} (x,y=5,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=23,15)}
{TEST_NEXT_UNIT {MACRO} (x,y=3,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,39)}
{TEST_NEXT_UNIT {MACRO} (x,y=31,23)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,9)}
{TEST_NEXT_UNIT {MACRO} (x,y=12,8)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,12)}
{TEST_NEXT_UNIT {MACRO} (x,y=18,32)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=24,17)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=34,14)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,28)}
{TEST_NEXT_UNIT {MACRO} (x,y=19,2)}
{TEST_NEXT_UNIT {MACRO} (x,y=32,3)}
{TEST_NEXT_UNIT {MACRO} (x,y=35,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,36)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,19)}
{TEST_NEXT_UNIT {MACRO} (x,y=25,24)}
{TEST_NEXT_UNIT {MACRO} (x,y=26,7)}
{TEST_NEXT_UNIT {MACRO} (x,y=2,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=14,34)}
{TEST_NEXT_UNIT {MACRO} (x,y=16,18)}
{TEST_NEXT_UNIT {MACRO} (x,y=39,42)}
{TEST_NEXT_UNIT {MACRO} (x,y=1,32)}
[wml_message]
message="$answer_counter| answers made"
logger=debug
to_chat=false
[/wml_message]
{VARIABLE anslength $answers.length}
[wml_message]
message="$answers.length| anslength"
logger=debug
to_chat=false
[/wml_message]
{IF_GEN_ANS
({ASSERT ({VARIABLE_CONDITIONAL answer_counter equals $anslength})}
[wml_message]
message="unit counter = $unit_counter"
logger=debug
to_chat=false
[/wml_message]
{VARIABLE temp $units.length}
[wml_message]
message="units.length = $units.length"
logger=debug
to_chat=false
[/wml_message])
()}
[/event]
[event]
name = side 1 turn refresh
{RETURN ([true][/true])}
[/event]
[/test]
#enddef
{MAKE_TEST characterize_pathfinding_one TEST_PATHFIND}
#define MAKE_TEST_INIT_ONLY ID MACRO
[test]
name="Unit Test {ID}"
id={ID}
{test/maps/pathfind_1.cfg}
[event]
name = side 1 turn 1
first_time_only=yes
{VARIABLE GEN_ANS {GENERATE_ANSWERS}}
{INIT_ANSWERS}
[/event]
[/test]
#enddef
{MAKE_TEST_INIT_ONLY characterize_pathfinding_init TEST_PATHFIND}

View File

@ -0,0 +1,10 @@
{GENERIC_UNIT_TEST "store_locations_one" (
[event]
name = start
[store_locations]
x,y=1,1
variable=tmp
[/store_locations]
{RETURN ({VARIABLE_CONDITIONAL tmp.terrain equals "Gg^Kov"})}
[/event]
)}

View File

@ -72,6 +72,11 @@
0 replace_schedule_prestart
0 modify_unit_facing
#
# Pathfinding
#
0 store_locations_one
0 characterize_pathfinding_one
#
# Attack calculations & codepath tests
#
0 test_grunt_tod_damage