From df5da9e26beaef5bbd994bc7fd4599db70438f72 Mon Sep 17 00:00:00 2001 From: Masaki Murooka Date: Fri, 13 Sep 2019 22:12:44 +0900 Subject: [PATCH] add defforeign test. --- .travis.sh | 2 ++ test/Makefile | 34 ++++++++++++++++++++++++++++++++++ test/Makefile.Cygwin | 10 ++++++++++ test/Makefile.Darwin | 10 ++++++++++ test/Makefile.Linux | 19 +++++++++++++++++++ test/Makefile.Linux64 | 10 ++++++++++ test/Makefile.LinuxARM | 10 ++++++++++ test/test-defforeign.l | 35 +++++++++++++++++++++++++++++++++++ test/testdefforeign.c | 34 ++++++++++++++++++++++++++++++++++ 9 files changed, 164 insertions(+) create mode 100644 test/Makefile create mode 100644 test/Makefile.Cygwin create mode 100644 test/Makefile.Darwin create mode 100644 test/Makefile.Linux create mode 100644 test/Makefile.Linux64 create mode 100644 test/Makefile.LinuxARM create mode 100644 test/test-defforeign.l create mode 100644 test/testdefforeign.c diff --git a/.travis.sh b/.travis.sh index 9a2a737e1..5a5f94ff4 100755 --- a/.travis.sh +++ b/.travis.sh @@ -87,6 +87,7 @@ if [ "$QEMU" != "" ]; then export EXIT_STATUS=0; set +e # run test in EusLisp/test + make -C test for test_l in test/*.l; do travis_time_start euslisp.${test_l##*/}.test @@ -235,6 +236,7 @@ if [[ "`uname -m`" == "aarch"* ]]; then fi # run test in EusLisp/test + make -C $CI_SOURCE_PATH/test for test_l in $CI_SOURCE_PATH/test/*.l; do travis_time_start euslisp.${test_l##*/}.test diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 000000000..793750016 --- /dev/null +++ b/test/Makefile @@ -0,0 +1,34 @@ +include Makefile.$(ARCHDIR) + +ifeq ($(ARCHDIR), LinuxARM) + # for LinuxARM, get MACHINE from the following command + # ref: https://github.com/euslisp/EusLisp/blob/89481741541488226fd78a92b2a8d1244169dd7f/lisp/Makefile.LinuxARM#L39 + MACHINE=$(shell uname -m | sed 's/\(armv[0-9]\).*/\1/') +else ifeq ($(ARCHDIR), Darwin) + # for Darwin, depends on OS_VERSION + # ref: https://github.com/euslisp/EusLisp/blob/89481741541488226fd78a92b2a8d1244169dd7f/lisp/Makefile.Darwin#L45-L50 + OS_VERSION=$(shell sw_vers -productVersion | sed s/\.[^.]*$$//) + ifeq ($(OS_VERSION), 10.5) + MACHINE=i386 + else + MACHINE=x86_64 + endif +else + MACHINE=$(shell grep "MACHINE=" $(EUSDIR)/lisp/Makefile | cut -f2 -d=) +endif + +CFLAGS=-I$(EUSDIR)/include -D$(ARCHDIR) -D$(MACHINE) +LDFLAGS= + +SRC=testdefforeign.c +OBJ=$(basename $(SRC)).o +LIB=$(LPFX)$(basename $(SRC)).$(LSFX) + +$(LIB): $(OBJ) + $(LD) $(SOFLAGS) $(OUTOPT)$(LIB) $(OBJ) $(LDFLAGS) + +$(OBJ): $(SRC) + $(CC) $(CFLAGS) -DCOMPILE_LIB -c $(SRC) $(OBJOPT)$(OBJ) + +clean: + rm -f $(LIB) $(OBJ) diff --git a/test/Makefile.Cygwin b/test/Makefile.Cygwin new file mode 100644 index 000000000..95ca8a1cc --- /dev/null +++ b/test/Makefile.Cygwin @@ -0,0 +1,10 @@ +CC = c++ -O2 -falign-functions=4 +OBJOPT = -o +OUTOPT = -o +LD = c++ -shared -falign-functions=4 +EXELD = c++ -falign-functions=4 +SOFLAGS = +EXESFX = .exe +LSFX = dll +LPFX = lib +LIBS = -L$(ARCHDIR) -lRAPID diff --git a/test/Makefile.Darwin b/test/Makefile.Darwin new file mode 100644 index 000000000..87cb77a3e --- /dev/null +++ b/test/Makefile.Darwin @@ -0,0 +1,10 @@ +CC = c++ -O2 -falign-functions=8 -fPIC -DDarwin -DGCC -I$(EUSDIR)/include +OBJOPT = -o +OUTOPT = -o +LD = c++ +SOFLAGS = -dynamiclib -flat_namespace -undefined suppress +EXELD = c++ +EXESFX = +LSFX = so +LPFX = lib +LIBS = -L$(ARCHDIR) -lRAPID diff --git a/test/Makefile.Linux b/test/Makefile.Linux new file mode 100644 index 000000000..dfe82555a --- /dev/null +++ b/test/Makefile.Linux @@ -0,0 +1,19 @@ +CC = c++ -O2 -DLinux -DGCC -I$(EUSDIR)/include +OBJOPT = -o +OUTOPT = -o +LD = c++ +SOFLAGS = -shared +EXELD = c++ +EXESFX = +LSFX = so +LPFX = lib +LIBS = -L$(ARCHDIR) -lRAPID + + +ifeq ($(shell /bin/uname -m), x86_64) +CC += -m32 +LD += -m32 +EXELD += -m32 +endif + + diff --git a/test/Makefile.Linux64 b/test/Makefile.Linux64 new file mode 100644 index 000000000..0842f7ece --- /dev/null +++ b/test/Makefile.Linux64 @@ -0,0 +1,10 @@ +CC = c++ -O2 -falign-functions=8 -fPIC -DLinux -DGCC -I$(EUSDIR)/include +OBJOPT = -o +OUTOPT = -o +LD = c++ +SOFLAGS = -shared +EXELD = c++ +EXESFX = +LSFX = so +LPFX = lib +LIBS = -L$(ARCHDIR) -lRAPID diff --git a/test/Makefile.LinuxARM b/test/Makefile.LinuxARM new file mode 100644 index 000000000..6fcae34de --- /dev/null +++ b/test/Makefile.LinuxARM @@ -0,0 +1,10 @@ +CC = c++ -O2 -fPIC -falign-functions=4 -DLinux -DGCC -I$(EUSDIR)/include +OBJOPT = -o +OUTOPT = -o +LD = c++ +SOFLAGS = -shared +EXELD = c++ +EXESFX = +LSFX = so +LPFX = lib +LIBS = -L$(ARCHDIR) -lRAPID diff --git a/test/test-defforeign.l b/test/test-defforeign.l new file mode 100644 index 000000000..fa1b8efe2 --- /dev/null +++ b/test/test-defforeign.l @@ -0,0 +1,35 @@ +(require :unittest "lib/llib/unittest.l") + +(init-unit-test) + +(deftest test-defforeign + (defvar *testforeign-lib* + (load-foreign (format nil "~a/test/libtestdefforeign.so" (unix:getenv "EUSDIR")))) + + (defforeign test1 + *testforeign-lib* + "test1" + (:integer :float) + :float + ) + + (defforeign test2 + *testforeign-lib* + "test2" + (:string) + :float + ) + + (setq test1-result (test1 1 2.5)) + (format t "test1: ~a~%" test1-result) + (assert (= test1-result 3.5)) + + (setq test2-result (test2 (float-vector 1.0 2.5))) + (format t "test2: ~a~%" test2-result) + (assert (= test2-result 3.5)) + ) + +(eval-when + (load eval) + (run-all-tests) + (exit)) diff --git a/test/testdefforeign.c b/test/testdefforeign.c new file mode 100644 index 000000000..aaf71f920 --- /dev/null +++ b/test/testdefforeign.c @@ -0,0 +1,34 @@ +// for eus.h +#include +#include +#include +#include +#include +#include +#include + +#define class eus_class +#define throw eus_throw +#define export eus_export +#define vector eus_vector +#define string eus_string +#include // include eus.h just for eusfloat_t ... +#undef class +#undef throw +#undef export +#undef vector +#undef string + +extern "C" { + eusfloat_t test1(eusinteger_t v1, eusfloat_t v2) { + printf("// v1: %d\n", (int)v1); + printf("// v2: %f\n", v2); + return v1 + v2; + } + + eusfloat_t test2(eusfloat_t *v) { + printf("// v[0]: %f\n", v[0]); + printf("// v[1]: %f\n", v[1]); + return v[0] + v[1]; + } +}