Skip to content

Commit

Permalink
add defforeign test.
Browse files Browse the repository at this point in the history
  • Loading branch information
mmurooka authored and k-okada committed May 31, 2020
1 parent 21a5d86 commit 7300b94
Show file tree
Hide file tree
Showing 7 changed files with 162 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
34 changes: 34 additions & 0 deletions test/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
GCC_MACHINE=$(shell gcc -dumpmachine)
$(info "-- GCC_MACHINE = ${GCC_MACHINE}")
OS=$(shell uname -s | sed 's/[^A-Za-z1-9].*//')
$(info "-- OS = ${OS}")
ifeq ($(OS),Linux)
export MAKEFILE=Makefile.Linux
endif
ifeq ($(OS),CYGWIN)
export MAKEFILE=Makefile.Cygwin
endif
ifeq ($(OS),Darwin)
export MAKEFILE=Makefile.Darwin
endif

$(info "-- MAKEFILE = ${MAKEFILE}")

# set EUSDIR if not defined
export EUSDIR?=$(CURDIR)/..
$(info "-- EUSDIR = ${EUSDIR}")

include $(MAKEFILE)

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)
12 changes: 12 additions & 0 deletions test/Makefile.Cygwin
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CC = c++
CFLAGS = -O2 -falign-functions=4 -DCygwin -I$(EUSDIR)/include
LDFLAGS =
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
12 changes: 12 additions & 0 deletions test/Makefile.Darwin
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CC = c++
CFLAGS = -O2 -falign-functions=8 -fPIC -DDarwin -DGCC -I$(EUSDIR)/include
LDFLAGS =
OBJOPT = -o
OUTOPT = -o
LD = c++
SOFLAGS = -dynamiclib -flat_namespace -undefined suppress
EXELD = c++
EXESFX =
LSFX = so
LPFX = lib
LIBS = -L$(ARCHDIR) -lRAPID
33 changes: 33 additions & 0 deletions test/Makefile.Linux
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
CC = c++
CFLAGS = -O2 -DLinux -DGCC -I$(EUSDIR)/include
LDFLAGS =
OBJOPT = -o
OUTOPT = -o
LD = c++
SOFLAGS = -shared
EXELD = c++
EXESFX =
LSFX = so
LPFX = lib

ifneq (,$(findstring 64,$(shell gcc -dumpmachine)))
CFLAGS+=-falign-functions=8
else
CFLAGS+=-falign-functions=4
endif

ifneq ($(shell gcc -dumpmachine | egrep "^(arm|aarch)"),)
LDFLAGS+=-Wl,-z,execstack
CFLAGS+=-DARM -fPIC
endif
ifneq ($(shell gcc -dumpmachine | grep "^x86_64"),)
CFLAGS+=-fPIC
endif

ifneq ($(shell gcc -dumpmachine | grep "i.*86-linux"),)
CC += -m32
LD += -m32
EXELD += -m32
endif


35 changes: 35 additions & 0 deletions test/test-defforeign.l
Original file line number Diff line number Diff line change
@@ -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))
34 changes: 34 additions & 0 deletions test/testdefforeign.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// for eus.h
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <setjmp.h>
#include <errno.h>
#include <sstream>

#define class eus_class
#define throw eus_throw
#define export eus_export
#define vector eus_vector
#define string eus_string
#include <eus.h> // 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];
}
}

0 comments on commit 7300b94

Please sign in to comment.