Merge pull request #1679 from spiro-trikaliotis/testsuite-ca65

Reorganized test/asm
This commit is contained in:
Bob Andrews 2022-02-20 19:54:13 +01:00 committed by GitHub
commit fffb4c3b40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 301 additions and 90 deletions

View File

@ -1,77 +1,34 @@
# Makefile for the assembler regression tests
# top-level Makefile for the regression tests
ifneq ($(shell echo),)
CMD_EXE = 1
endif
ifdef CMD_EXE
EXE = .exe
MKDIR = mkdir $(subst /,\,$1)
RMDIR = -rmdir /q /s $(subst /,\,$1)
RMDIR = -rmdir /s /q $(subst /,\,$1)
else
EXE =
MKDIR = mkdir -p $1
RMDIR = $(RM) -r $1
endif
ifdef QUIET
.SILENT:
endif
WORKDIR = ../testwrk/asm
CA65 := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65)
LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65)
SUBDIRS = cpudetect opcodes listing
WORKDIR = ../../testwrk/asm
.PHONY: all continue mostlyclean clean
ISEQUAL = ../../testwrk/isequal$(EXE)
all: mostlyclean continue
CC = gcc
CFLAGS = -O2
define CALL_template
.PHONY: all clean
continue::
@$(MAKE) -C $1 all
OPCODE_REFS := $(wildcard *-opcodes.ref)
OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin)
OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%)
mostlyclean::
@$(MAKE) -C $1 clean
CPUDETECT_REFS := $(wildcard *-cpudetect.ref)
CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin)
CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%)
endef
all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR)/paramcount.o
$(foreach subdir,$(SUBDIRS),$(eval $(call CALL_template,$(subdir))))
$(WORKDIR):
$(call MKDIR,$(WORKDIR))
$(ISEQUAL): ../isequal.c | $(WORKDIR)
$(CC) $(CFLAGS) -o $@ $<
define OPCODE_template
$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL)
$(if $(QUIET),echo asm/$1-opcodes.bin)
$(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$<
$(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib
$(ISEQUAL) $1-opcodes.ref $$@
endef # OPCODE_template
$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu))))
define CPUDETECT_template
$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL)
$(if $(QUIET),echo asm/$1-cpudetect.bin)
$(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$<
$(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib
$(ISEQUAL) $1-cpudetect.ref $$@
endef # CPUDETECT_template
$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu))))
$(WORKDIR)/%.o: %.s | $(WORKDIR)
$(CA65) -l $(@:.o=.lst) -o $@ $<
clean:
clean: mostlyclean
@$(call RMDIR,$(WORKDIR))

View File

@ -0,0 +1,61 @@
# Makefile for the assembler regression tests
ifneq ($(shell echo),)
CMD_EXE = 1
endif
ifdef CMD_EXE
EXE = .exe
MKDIR = mkdir $(subst /,\,$1)
RMDIR = -rmdir /q /s $(subst /,\,$1)
else
EXE =
MKDIR = mkdir -p $1
RMDIR = $(RM) -r $1
endif
ifdef QUIET
.SILENT:
endif
CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65)
LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65)
WORKDIR = ../../../testwrk/asm/cpudetect
ISEQUAL = ../../../testwrk/isequal$(EXE)
CC = gcc
CFLAGS = -O2
.PHONY: all clean
CPUDETECT_REFS := $(wildcard *-cpudetect.ref)
CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin)
CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%)
all: $(CPUDETECT_BINS)
$(WORKDIR):
$(call MKDIR,$(WORKDIR))
$(ISEQUAL): ../../isequal.c | $(WORKDIR)
$(CC) $(CFLAGS) -o $@ $<
define CPUDETECT_template
$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL)
$(if $(QUIET),echo asm/$1-cpudetect.bin)
$(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$<
$(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib
$(ISEQUAL) $1-cpudetect.ref $$@
endef # CPUDETECT_template
$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu))))
$(WORKDIR)/%.o: %.s | $(WORKDIR)
$(CA65) -l $(@:.o=.lst) -o $@ $<
clean:
@$(call RMDIR,$(WORKDIR))

View File

@ -0,0 +1,15 @@
CPU Detect Tests
----------------
These tests all assemble the same file "cpudetect.s" which contains several
conditionals for several CPUs, only using every option known to the "--cpu"
command-line switch of ca65/cl65.
Reference (".ref") Files
------------------------
Some hints about creating new files:
Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the
tests; one of them will fail due to a mismatch. Review the output of the
".lst" file pedantically, then copy the ".bin" over the empty ".ref" file.

89
test/asm/listing/Makefile Normal file
View File

@ -0,0 +1,89 @@
# Makefile for the assembler regression tests
ifneq ($(shell echo),)
CMD_EXE = 1
endif
ifdef CMD_EXE
EXE = .exe
MKDIR = mkdir $(subst /,\,$1)
RMDIR = -rmdir /q /s $(subst /,\,$1)
else
EXE =
MKDIR = mkdir -p $1
RMDIR = $(RM) -r $1
endif
ifdef QUIET
.SILENT:
endif
CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65)
LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65)
WORKDIR = ../../../testwrk/asm/listing
ISEQUAL = ../../../testwrk/isequal$(EXE)
CC = gcc
CFLAGS = -O2
.PHONY: all clean
LISTING_SRC := $(wildcard *.s)
LISTING_TESTS = $(LISTING_SRC:%.s=%)
LISTING_BINS = $(LISTING_SRC:%.s=$(WORKDIR)/%.bin)
all: $(LISTING_BINS)
$(WORKDIR):
$(call MKDIR,$(WORKDIR))
$(ISEQUAL): ../../isequal.c | $(WORKDIR)
$(CC) $(CFLAGS) -o $@ $<
define LISTING_template
$(WORKDIR)/$1.bin: $1.s $(ISEQUAL)
$(if $(QUIET),echo asm/$1.bin)
# compile without generating listing
$(CA65) -t none -o $$(@:.bin=.o) $$<
$(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib
ifneq ($(wildcard $1.bin-ref),)
$(ISEQUAL) $1.bin-ref $$@
endif
$(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$<
$(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib
# check if the result bin is the same as without listing file
$(ISEQUAL) $$@ $$(@:.bin=.list-bin)
ifneq ($(wildcard $1.list-ref),)
# we have a reference file, compare that, too
# remove first line which contains a version number
tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst)
$(ISEQUAL) $1.list-ref $$(@:.bin=.lst)
endif
# $(CA65) -t none -f -l $$(@:.bin=.flist.orig) -o $$(@:.bin=.flist-o) $$<
# $(LD65) -t none -o $$(@:.bin=.flist-bin) $$(@:.bin=.flist-o) none.lib
# # check if the result bin is the same as without listing file
# $(ISEQUAL) $$@ $$(@:.bin=.flist-bin)
endef # LISTING_template
$(foreach listing,$(LISTING_TESTS),$(eval $(call LISTING_template,$(listing))))
$(WORKDIR)/%.o: %.s | $(WORKDIR)
$(CA65) -l $(@:.o=.lst) -o $@ $<
clean:
@$(call RMDIR,$(WORKDIR))

View File

@ -0,0 +1,27 @@
Overall test:
-------------
These testcases can be used to test different aspects of the assembler.
The name of a test is everything in the form <test>.s.
The following reference files can be added:
- <test>.bin-ref:
This is a reference for the resulting binary.
The binary as binary tested against this file.
If they are not equal, the test fails.
- <test>.list-ref
This is a reference for the resulting listing output
This file *must* have the first line of the listing removed, as that
contains a ca65 version string, and almost always this will be changed!
Note that the resulting .bin file is generated twice: Once with no listing
file, and once with listing file. This way, one can find out if the listing
file generation changes anything with the resulting binary output.
TODO:
- add the possibility to test for specific error output that are to be
expected

61
test/asm/opcodes/Makefile Normal file
View File

@ -0,0 +1,61 @@
# Makefile for the assembler regression tests
ifneq ($(shell echo),)
CMD_EXE = 1
endif
ifdef CMD_EXE
EXE = .exe
MKDIR = mkdir $(subst /,\,$1)
RMDIR = -rmdir /q /s $(subst /,\,$1)
else
EXE =
MKDIR = mkdir -p $1
RMDIR = $(RM) -r $1
endif
ifdef QUIET
.SILENT:
endif
CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65)
LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65)
WORKDIR = ../../../testwrk/asm/opcodes
ISEQUAL = ../../../testwrk/isequal$(EXE)
CC = gcc
CFLAGS = -O2
.PHONY: all clean
OPCODE_REFS := $(wildcard *-opcodes.ref)
OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin)
OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%)
all: $(OPCODE_BINS)
$(WORKDIR):
$(call MKDIR,$(WORKDIR))
$(ISEQUAL): ../../isequal.c | $(WORKDIR)
$(CC) $(CFLAGS) -o $@ $<
define OPCODE_template
$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL)
$(if $(QUIET),echo asm/$1-opcodes.bin)
$(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$<
$(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib
$(ISEQUAL) $1-opcodes.ref $$@
endef # OPCODE_template
$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu))))
$(WORKDIR)/%.o: %.s | $(WORKDIR)
$(CA65) -l $(@:.o=.lst) -o $@ $<
clean:
@$(call RMDIR,$(WORKDIR))

View File

@ -0,0 +1,29 @@
Opcode Tests:
-------------
These testcases are inspired by the ones now removed from test/assembler.
The main purpose is to have each possible opcode generated at least once,
either by an Assembly instruction or a ".byte"-placeholder. Typically
generated by disassembling a binary dump that contains data in the form
of the pattern that each opcode is stated once in order followed by easy
to recognise:
00 00 EA 00
01 00 EA 00
02 00 EA 00
[...]
fe 00 EA 00
ff 00 EA 00
The disassembly is then put in a better readable form by replacing the
leftover dummy opcode parameters with something more recognizable.
The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been
put together by Sven Oliver ("SvOlli") Moll, as well as a template for the
m740 instructions set. Later 6502dtv support was also added.
Still to do is to find a way to implement an opcode testcase for the 65816
processor, since it's capable of executing instructions with an 8-bit and
a 16-bit operator alike, distinguished by only one processor flag.

View File

@ -4,44 +4,16 @@ Assembler Testcases
Opcode Tests:
-------------
These testcases are inspired by the ones now removed from test/assembler.
The main purpose is to have each possible opcode generated at least once,
either by an Assembly instruction or a ".byte"-placeholder. Typically
generated by disassembling a binary dump that contains data in the form
of the pattern that each opcode is stated once in order followed by easy
to recognise:
00 00 EA 00
01 00 EA 00
02 00 EA 00
[...]
fe 00 EA 00
ff 00 EA 00
The disassembly is then put in a better readable form by replacing the
leftover dummy opcode parameters with something more recognizable.
The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been
put together by Sven Oliver ("SvOlli") Moll, as well as a template for the
m740 instructions set. Later 6502dtv support was also added.
Still to do is to find a way to implement an opcode testcase for the 65816
processor, since it's capable of executing instructions with an 8-bit and
a 16-bit operator alike, distinguished by only one processor flag.
these go into opcodes/. Refer to opcodes/readme.txt
CPU Detect Tests
----------------
These tests all assemble the same file "cpudetect.s" which contains several
conditionals for several CPUs, only using every option known to the "--cpu"
command-line switch of ca65/cl65.
these go into cpudetect/. Refer to cpudetect/readme.txt
Reference (".ref") Files
------------------------
Overall tests:
--------------
Some hints about creating new files:
Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the
tests; one of them will fail due to a mismatch. Review the output of the
".lst" file pedantically, then copy the ".bin" over the empty ".ref" file.
These go into listing/. Refer to listing/readme.txt