mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Increase RGBASM test coverage
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
.Op Fl r Ar ram_size
|
.Op Fl r Ar ram_size
|
||||||
.Op Fl t Ar title_str
|
.Op Fl t Ar title_str
|
||||||
.Op Fl W Ar warning
|
.Op Fl W Ar warning
|
||||||
.Op Ar
|
.Ar
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
@@ -41,7 +41,7 @@ and to have already populated whichever fields they don't specify using
|
|||||||
.Nm .
|
.Nm .
|
||||||
.Pp
|
.Pp
|
||||||
The input
|
The input
|
||||||
.Ar asmfile
|
.Ar file
|
||||||
can be a path to a file, or
|
can be a path to a file, or
|
||||||
.Cm \-
|
.Cm \-
|
||||||
to read from standard input.
|
to read from standard input.
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ option, which implies
|
|||||||
but also prohibits the use of banked VRAM.
|
but also prohibits the use of banked VRAM.
|
||||||
.Pp
|
.Pp
|
||||||
The input
|
The input
|
||||||
.Ar asmfile
|
.Ar file
|
||||||
can be a path to a file, or
|
can be a path to a file, or
|
||||||
.Cm \-
|
.Cm \-
|
||||||
to read from standard input.
|
to read from standard input.
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ bool fstk_FileError(std::string const &path, char const *functionName) {
|
|||||||
if (options.missingIncludeState == GEN_EXIT) {
|
if (options.missingIncludeState == GEN_EXIT) {
|
||||||
verbosePrint(
|
verbosePrint(
|
||||||
VERB_NOTICE,
|
VERB_NOTICE,
|
||||||
"Aborting (-MG) on `%s` file \"%s\": %s\n",
|
"Aborting due to '-MG' on `%s` file \"%s\": %s\n",
|
||||||
functionName,
|
functionName,
|
||||||
path.c_str(),
|
path.c_str(),
|
||||||
strerror(errno)
|
strerror(errno)
|
||||||
|
|||||||
@@ -159,15 +159,10 @@ static void writeRpn(std::vector<uint8_t> &rpnexpr, std::vector<uint8_t> const &
|
|||||||
case RPN_SYM:
|
case RPN_SYM:
|
||||||
// The symbol name is always written expanded
|
// The symbol name is always written expanded
|
||||||
sym = sym_FindExactSymbol(getSymName());
|
sym = sym_FindExactSymbol(getSymName());
|
||||||
if (sym->isConstant()) {
|
|
||||||
rpnexpr[rpnptr++] = RPN_CONST;
|
|
||||||
value = sym->getConstantValue();
|
|
||||||
} else {
|
|
||||||
rpnexpr[rpnptr++] = RPN_SYM;
|
|
||||||
registerUnregisteredSymbol(*sym); // Ensure that `sym->ID` is set
|
registerUnregisteredSymbol(*sym); // Ensure that `sym->ID` is set
|
||||||
value = sym->ID;
|
value = sym->ID;
|
||||||
}
|
|
||||||
|
|
||||||
|
rpnexpr[rpnptr++] = RPN_SYM;
|
||||||
rpnexpr[rpnptr++] = value & 0xFF;
|
rpnexpr[rpnptr++] = value & 0xFF;
|
||||||
rpnexpr[rpnptr++] = value >> 8;
|
rpnexpr[rpnptr++] = value >> 8;
|
||||||
rpnexpr[rpnptr++] = value >> 16;
|
rpnexpr[rpnptr++] = value >> 16;
|
||||||
|
|||||||
@@ -351,11 +351,8 @@ uint32_t Symbol::getConstantValue() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sym_IsPC(this)) {
|
if (sym_IsPC(this)) {
|
||||||
if (!getSection()) {
|
assume(getSection()); // There's no way to reach here from outside of a section
|
||||||
error("PC has no value outside of a section");
|
|
||||||
} else {
|
|
||||||
error("PC does not have a constant value; the current section is not fixed");
|
error("PC does not have a constant value; the current section is not fixed");
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
error("`%s` does not have a constant value", name.c_str());
|
error("`%s` does not have a constant value", name.c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
3
test/asm/abort-on-missing-incbin-slice.asm
Normal file
3
test/asm/abort-on-missing-incbin-slice.asm
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
section "test", rom0
|
||||||
|
incbin "incbin-mg-noexist.bin", 0, 2
|
||||||
|
println "never reached"
|
||||||
1
test/asm/abort-on-missing-incbin-slice.flags
Normal file
1
test/asm/abort-on-missing-incbin-slice.flags
Normal file
@@ -0,0 +1 @@
|
|||||||
|
-MG
|
||||||
3
test/asm/abort-on-missing-incbin.asm
Normal file
3
test/asm/abort-on-missing-incbin.asm
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
section "test", rom0
|
||||||
|
incbin "incbin-mg-noexist.bin", 2
|
||||||
|
println "never reached"
|
||||||
1
test/asm/abort-on-missing-incbin.flags
Normal file
1
test/asm/abort-on-missing-incbin.flags
Normal file
@@ -0,0 +1 @@
|
|||||||
|
-MG
|
||||||
15
test/asm/deprecated-functions.asm
Normal file
15
test/asm/deprecated-functions.asm
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
opt Wno-unmapped-char
|
||||||
|
def s equs "Hello world!"
|
||||||
|
|
||||||
|
assert strin(#s, "l") == strfind(#s, "l") + 1
|
||||||
|
assert strrin(#s, "l") == strrfind(#s, "l") + 1
|
||||||
|
|
||||||
|
assert !strcmp(strsub(#s, 7), strslice(#s, 6))
|
||||||
|
assert !strcmp(strsub(#s, 7, 5), strslice(#s, 6, 11))
|
||||||
|
assert !strcmp(strsub(#s, strlen(#s), 1), strslice(#s, strlen(#s) - 1, strlen(#s)))
|
||||||
|
assert !strcmp(strsub(#s, 7, 999), strslice(#s, 6, 999))
|
||||||
|
|
||||||
|
assert !strcmp(charsub(#s, 12), strchar(#s, 11))
|
||||||
|
assert !strcmp(charsub(#s, -1), strchar(#s, -1))
|
||||||
|
assert !strcmp(charsub(#s, -999), strchar(#s, -999))
|
||||||
|
assert !strcmp(charsub(#s, 999), strchar(#s, 999))
|
||||||
32
test/asm/deprecated-functions.err
Normal file
32
test/asm/deprecated-functions.err
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
warning: `STRIN` is deprecated; use 0-indexed `STRFIND` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(4)
|
||||||
|
warning: `STRRIN` is deprecated; use 0-indexed `STRRFIND` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(5)
|
||||||
|
warning: `STRSUB` is deprecated; use 0-indexed `STRSLICE` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(7)
|
||||||
|
warning: `STRSUB` is deprecated; use 0-indexed `STRSLICE` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(8)
|
||||||
|
warning: `STRSUB` is deprecated; use 0-indexed `STRSLICE` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(9)
|
||||||
|
warning: `STRSUB` is deprecated; use 0-indexed `STRSLICE` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(10)
|
||||||
|
warning: STRSUB: Length too big: 999 [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(10)
|
||||||
|
warning: STRSLICE: Stop index 999 is past the end of the string [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(10)
|
||||||
|
warning: `CHARSUB` is deprecated; use 0-indexed `STRCHAR` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(12)
|
||||||
|
warning: `CHARSUB` is deprecated; use 0-indexed `STRCHAR` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(13)
|
||||||
|
warning: `CHARSUB` is deprecated; use 0-indexed `STRCHAR` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(14)
|
||||||
|
warning: CHARSUB: Position starts at 1 [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(14)
|
||||||
|
warning: STRCHAR: Index starts at 0 [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(14)
|
||||||
|
warning: `CHARSUB` is deprecated; use 0-indexed `STRCHAR` instead [-Wobsolete]
|
||||||
|
at deprecated-functions.asm(15)
|
||||||
|
warning: CHARSUB: Position 999 is past the end of the string [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(15)
|
||||||
|
warning: STRCHAR: Index 999 is past the end of the string [-Wbuiltin-args]
|
||||||
|
at deprecated-functions.asm(15)
|
||||||
@@ -4,7 +4,9 @@ PUSHS
|
|||||||
SECTION "test", WRAM0
|
SECTION "test", WRAM0
|
||||||
UNION
|
UNION
|
||||||
INCLUDE "does not exist"
|
INCLUDE "does not exist"
|
||||||
|
/*
|
||||||
ENDU
|
ENDU
|
||||||
POPS
|
POPS
|
||||||
POPO
|
POPO
|
||||||
POPC
|
POPC
|
||||||
|
*/
|
||||||
|
|||||||
2
test/asm/readfile-max-mg.asm
Normal file
2
test/asm/readfile-max-mg.asm
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
def s equs readfile("readfile-mg-noexist.inc", $ff)
|
||||||
|
println "unreached"
|
||||||
1
test/asm/readfile-max-mg.flags
Normal file
1
test/asm/readfile-max-mg.flags
Normal file
@@ -0,0 +1 @@
|
|||||||
|
-MG
|
||||||
2
test/asm/readfile-mg.asm
Normal file
2
test/asm/readfile-mg.asm
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
def s equs readfile("readfile-mg-noexist.inc")
|
||||||
|
println "unreached"
|
||||||
1
test/asm/readfile-mg.flags
Normal file
1
test/asm/readfile-mg.flags
Normal file
@@ -0,0 +1 @@
|
|||||||
|
-MG
|
||||||
10
test/link/pipeline/a.asm
Normal file
10
test/link/pipeline/a.asm
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
section "test", rom0
|
||||||
|
db 1, 4, 9, 16
|
||||||
|
|
||||||
|
section "entrypoint", rom0[$100]
|
||||||
|
ld b, b
|
||||||
|
jp Start
|
||||||
|
|
||||||
|
section "start", rom0[$150]
|
||||||
|
Start::
|
||||||
|
jp Start
|
||||||
BIN
test/link/pipeline/out.gb
Normal file
BIN
test/link/pipeline/out.gb
Normal file
Binary file not shown.
@@ -26,6 +26,7 @@ rescolors="$(tput op)"
|
|||||||
|
|
||||||
RGBASM=../../rgbasm
|
RGBASM=../../rgbasm
|
||||||
RGBLINK=../../rgblink
|
RGBLINK=../../rgblink
|
||||||
|
RGBFIX=../../rgbfix
|
||||||
|
|
||||||
startTest () {
|
startTest () {
|
||||||
echo "${bold}${green}${test} assembling...${rescolors}${resbold}"
|
echo "${bold}${green}${test} assembling...${rescolors}${resbold}"
|
||||||
@@ -71,7 +72,7 @@ tryCmpRomSize () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rgblinkQuiet () {
|
rgblinkQuiet () {
|
||||||
out="$(env $RGBLINK -Weverything -B collapse "$@")" || return $?
|
out="$(env "$RGBLINK" -Weverything -B collapse "$@")" || return $?
|
||||||
if [[ -n "$out" ]]; then
|
if [[ -n "$out" ]]; then
|
||||||
echo "$bold${red}Linking shouldn't produce anything on stdout!${rescolors}${resbold}"
|
echo "$bold${red}Linking shouldn't produce anything on stdout!${rescolors}${resbold}"
|
||||||
false
|
false
|
||||||
@@ -251,6 +252,16 @@ tryDiff "$test"/out.err "$outtemp"
|
|||||||
tryCmp "$test"/out.gb "$gbtemp"
|
tryCmp "$test"/out.gb "$gbtemp"
|
||||||
evaluateTest
|
evaluateTest
|
||||||
|
|
||||||
|
test="pipeline"
|
||||||
|
startTest
|
||||||
|
continueTest
|
||||||
|
("$RGBASM" -Weverything -B collapse -o - - | \
|
||||||
|
"$RGBLINK" -Weverything -B collapse -o - - | \
|
||||||
|
"$RGBFIX" -Weverything -v -p 0xff -) < "$test"/a.asm > "$gbtemp"
|
||||||
|
# This test does not trim its output with 'dd' because it needs to verify the correct output size
|
||||||
|
tryCmp "$test"/out.gb "$gbtemp"
|
||||||
|
evaluateTest
|
||||||
|
|
||||||
test="same-consts"
|
test="same-consts"
|
||||||
startTest
|
startTest
|
||||||
"$RGBASM" -o "$otemp" "$test"/a.asm
|
"$RGBASM" -o "$otemp" "$test"/a.asm
|
||||||
|
|||||||
Reference in New Issue
Block a user