diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2021-03-25 16:33:05 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2021-03-25 16:44:41 -0400 |
commit | 95ec2cf039f0efdc6dadfb6fe766ace231a1b6b1 (patch) | |
tree | 5a7b79846bd7f07e40310da46b21873774a08ef7 /macros/asserts.asm | |
parent | e1f6bb53939be34f55e05cbbd19cd758936b3422 (diff) |
Verify data table and name list sizes with assertion macros
Fixes #312
Diffstat (limited to 'macros/asserts.asm')
-rw-r--r-- | macros/asserts.asm | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/macros/asserts.asm b/macros/asserts.asm new file mode 100644 index 00000000..d04c7942 --- /dev/null +++ b/macros/asserts.asm @@ -0,0 +1,87 @@ +; Macros to verify assumptions about the data or code + +table_width: MACRO +CURRENT_TABLE_WIDTH = \1 +IF DEF(CURRENT_TABLE_START) +PURGE CURRENT_TABLE_START +ENDC +IF _NARG == 2 +CURRENT_TABLE_START EQUS "\2" +ELSE +CURRENT_TABLE_START EQUS "._table_width\@" +CURRENT_TABLE_START: +ENDC +ENDM + +assert_table_length: MACRO +x = \1 + ASSERT x * CURRENT_TABLE_WIDTH == @ - CURRENT_TABLE_START, \ + "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" +ENDM + +list_start: MACRO +list_index = 0 +IF DEF(CURRENT_LIST_START) +PURGE CURRENT_LIST_START +ENDC +IF _NARG == 1 +CURRENT_LIST_START EQUS "\1" +ELSE +CURRENT_LIST_START EQUS "._list_start\@" +CURRENT_LIST_START: +ENDC +ENDM + +li: MACRO + ASSERT !STRIN(\1, "@"), STRCAT("String terminator \"@\" in list entry: ", \1) + db \1, "@" +list_index = list_index + 1 +ENDM + +assert_list_length: MACRO +x = \1 + ASSERT x == list_index, \ + "{CURRENT_LIST_START}: expected {d:x} entries, got {d:list_index}" +ENDM + +def_grass_wildmons: MACRO +;\1: encounter rate +if DEF(CURRENT_GRASS_WILDMONS_LABEL) +PURGE CURRENT_GRASS_WILDMONS_LABEL +endc +CURRENT_GRASS_WILDMONS_RATE = \1 +CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1" +CURRENT_GRASS_WILDMONS_LABEL: + db \1 +ENDM + +end_grass_wildmons: MACRO + IF CURRENT_GRASS_WILDMONS_RATE == 0 + assert 1 == @ - CURRENT_GRASS_WILDMONS_LABEL, \ + "def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte" + ELSE + assert WILDDATA_LENGTH == @ - CURRENT_GRASS_WILDMONS_LABEL, \ + "def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes" + ENDC +ENDM + +def_water_wildmons: MACRO +;\1: encounter rate +if DEF(CURRENT_WATER_WILDMONS_LABEL) +PURGE CURRENT_WATER_WILDMONS_LABEL +endc +CURRENT_WATER_WILDMONS_RATE = \1 +CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1" +CURRENT_WATER_WILDMONS_LABEL: + db \1 +ENDM + +end_water_wildmons: MACRO + IF CURRENT_WATER_WILDMONS_RATE == 0 + assert 1 == @ - CURRENT_WATER_WILDMONS_LABEL, \ + "def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte" + ELSE + assert WILDDATA_LENGTH == @ - CURRENT_WATER_WILDMONS_LABEL, \ + "def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes" + ENDC +ENDM |