mirror of https://github.com/mono/CppSharp.git
8 changed files with 259 additions and 18 deletions
@ -0,0 +1,21 @@ |
|||||||
|
qjs_inc_dir = path.getabsolute("../../deps/txiki.js/deps/quickjs/include") |
||||||
|
qjs_lib_dir = path.getabsolute("../../deps/txiki.js/deps/quickjs/include") |
||||||
|
|
||||||
|
workspace "qjs" |
||||||
|
configurations { "release" } |
||||||
|
location "gen" |
||||||
|
symbols "On" |
||||||
|
optimize "Off" |
||||||
|
|
||||||
|
project "test" |
||||||
|
kind "SharedLib" |
||||||
|
language "C++" |
||||||
|
files {"gen/**.cpp"} |
||||||
|
includedirs { qjs_inc_dir, ".." } |
||||||
|
libdirs { qjs_lib_dir } |
||||||
|
filter { "kind:StaticLib" } |
||||||
|
links { "quickjs" } |
||||||
|
filter { "kind:SharedLib" } |
||||||
|
defines { "JS_SHARED_LIBRARY" } |
||||||
|
filter { "kind:SharedLib", "system:macosx" } |
||||||
|
linkoptions { "-undefined dynamic_lookup" } |
@ -0,0 +1,96 @@ |
|||||||
|
import * as test from "./libtest.so"; |
||||||
|
|
||||||
|
function assert(actual, expected, message) { |
||||||
|
if (arguments.length == 1) |
||||||
|
expected = true; |
||||||
|
|
||||||
|
if (actual === expected) |
||||||
|
return; |
||||||
|
|
||||||
|
if (actual !== null && expected !== null |
||||||
|
&& typeof actual == 'object' && typeof expected == 'object' |
||||||
|
&& actual.toString() === expected.toString()) |
||||||
|
return; |
||||||
|
|
||||||
|
throw Error("assertion failed: got |" + actual + "|" + |
||||||
|
", expected |" + expected + "|" + |
||||||
|
(message ? " (" + message + ")" : "")); |
||||||
|
} |
||||||
|
|
||||||
|
const eq = assert; |
||||||
|
const floateq = (actual, expected) => { assert(Math.abs(actual - expected) < Number.EPSILON) } |
||||||
|
|
||||||
|
const ascii = v => v.charCodeAt(0) |
||||||
|
|
||||||
|
function builtins() |
||||||
|
{ |
||||||
|
eq(test.ReturnsVoid(), undefined) |
||||||
|
|
||||||
|
eq(test.ReturnsBool(), true) |
||||||
|
eq(test.PassAndReturnsBool(false), false) |
||||||
|
|
||||||
|
eq(test.ReturnsNullptr(), null) |
||||||
|
//eq(test.PassAndReturnsNullptr(null), null)
|
||||||
|
eq(test.ReturnsNullptr(), null) |
||||||
|
|
||||||
|
eq(test.ReturnsChar (), ascii('a')); |
||||||
|
eq(test.ReturnsSChar(), ascii('a')); |
||||||
|
eq(test.ReturnsUChar(), ascii('a')); |
||||||
|
|
||||||
|
eq(test.PassAndReturnsChar (ascii('a')), ascii('a')); |
||||||
|
eq(test.PassAndReturnsSChar(ascii('b')), ascii('b')); |
||||||
|
eq(test.PassAndReturnsUChar(ascii('c')), ascii('c')); |
||||||
|
|
||||||
|
// TODO: add wchar_t tests
|
||||||
|
|
||||||
|
eq(test.ReturnsFloat (), 5.0); |
||||||
|
eq(test.ReturnsDouble(), -5.0); |
||||||
|
//eq(test.ReturnsLongDouble(), -5.0);
|
||||||
|
|
||||||
|
//floateq(test.PassAndReturnsFloat (1.32), 1.32);
|
||||||
|
floateq(test.PassAndReturnsDouble(1.32), 1.32); |
||||||
|
//float(test.PassAndReturnsLongDouble(1.32), 1.32);
|
||||||
|
|
||||||
|
eq(test.ReturnsInt8 (), -5); |
||||||
|
eq(test.ReturnsUInt8 (), 5); |
||||||
|
eq(test.ReturnsInt16 (), -5); |
||||||
|
eq(test.ReturnsUInt16(), 5); |
||||||
|
eq(test.ReturnsInt32 (), -5); |
||||||
|
eq(test.ReturnsUInt32(), 5); |
||||||
|
eq(test.ReturnsInt64 (), -5n); |
||||||
|
eq(test.ReturnsUInt64(), 5n); |
||||||
|
|
||||||
|
const int8 = { min: -(2**7), max: (2**7) - 1 }; |
||||||
|
eq(test.PassAndReturnsInt8(int8.min), int8.min); |
||||||
|
eq(test.PassAndReturnsInt8(int8.max), int8.max); |
||||||
|
|
||||||
|
const uint8 = { min: 0, max: (2**8) - 1 }; |
||||||
|
eq(test.PassAndReturnsUInt8(uint8.min), uint8.min); |
||||||
|
eq(test.PassAndReturnsUInt8(uint8.max), uint8.max); |
||||||
|
|
||||||
|
const int16 = { min: -(2**15), max: (2**15) - 1 }; |
||||||
|
eq(test.PassAndReturnsInt16(int16.min), int16.min); |
||||||
|
eq(test.PassAndReturnsInt16(int16.max), int16.max); |
||||||
|
|
||||||
|
const uint16 = { min: 0, max: (2**16) - 1 }; |
||||||
|
eq(test.PassAndReturnsUInt16(uint16.min), uint16.min); |
||||||
|
eq(test.PassAndReturnsUInt16(uint16.max), uint16.max); |
||||||
|
|
||||||
|
const int32 = { min: -(2**31), max: (2**31) - 1 }; |
||||||
|
eq(test.PassAndReturnsInt32(int32.min), int32.min); |
||||||
|
eq(test.PassAndReturnsInt32(int32.max), int32.max); |
||||||
|
|
||||||
|
const uint32 = { min: 0, max: (2**32) - 1 }; |
||||||
|
eq(test.PassAndReturnsUInt32(uint32.min), uint32.min); |
||||||
|
eq(test.PassAndReturnsUInt32(uint32.max), uint32.max); |
||||||
|
|
||||||
|
const int64 = { min: BigInt(2**63) * -1n, max: BigInt(2**63) - 1n }; |
||||||
|
eq(test.PassAndReturnsInt64(int64.min), int64.min); |
||||||
|
eq(test.PassAndReturnsInt64(int64.max), int64.max); |
||||||
|
|
||||||
|
const uint64 = { min: BigInt(0), max: BigInt(2**64) - 1n }; |
||||||
|
eq(test.PassAndReturnsUInt64(uint64.min), uint64.min); |
||||||
|
eq(test.PassAndReturnsUInt64(uint64.max), uint64.max); |
||||||
|
} |
||||||
|
|
||||||
|
builtins(); |
@ -0,0 +1,26 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
set -e |
||||||
|
dir=$(cd "$(dirname "$0")"; pwd) |
||||||
|
rootdir="$dir/../.." |
||||||
|
configuration=Release |
||||||
|
platform=x64 |
||||||
|
jsinterp="$rootdir/deps/quickjs/qjs" |
||||||
|
|
||||||
|
red=`tput setaf 1` |
||||||
|
green=`tput setaf 2` |
||||||
|
reset=`tput sgr0` |
||||||
|
|
||||||
|
echo "${green}Generating bindings${reset}" |
||||||
|
#dotnet $rootdir/bin/${configuration}_${platform}/CppSharp.CLI.dll \ |
||||||
|
# --gen=qjs -I$dir/.. -o $dir/gen -m tests $dir/../*.h |
||||||
|
|
||||||
|
echo "${green}Building generated binding files${reset}" |
||||||
|
premake=$rootdir/build/premake.sh |
||||||
|
$premake --file=$dir/premake5.lua gmake |
||||||
|
make -C $dir/gen |
||||||
|
echo |
||||||
|
|
||||||
|
echo "${green}Executing JS tests with QuickJS${reset}" |
||||||
|
cp $dir/gen/bin/release/libtest.so $dir |
||||||
|
#cp $dir/gen/bin/release/libtest.dylib $dir |
||||||
|
$jsinterp $dir/test.js |
Loading…
Reference in new issue