mirror of https://github.com/swig/swig
another batch of run tests
This commit is contained in:
parent
0d8ce6e031
commit
d3e91b8273
|
@ -23,7 +23,9 @@ CPP_TEST_CASES += \
|
||||||
inplaceadd \
|
inplaceadd \
|
||||||
input \
|
input \
|
||||||
javascript_lib_arrays \
|
javascript_lib_arrays \
|
||||||
li_factory
|
li_factory \
|
||||||
|
li_std_containers_int \
|
||||||
|
li_std_map_member
|
||||||
|
|
||||||
SWIGEXE = $(top_builddir)/swig
|
SWIGEXE = $(top_builddir)/swig
|
||||||
SWIG_LIB_DIR = $(top_srcdir)/Lib
|
SWIG_LIB_DIR = $(top_srcdir)/Lib
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
// Check usage of template attributes
|
||||||
|
|
||||||
|
var li_attribute_template = require("li_attribute_template");
|
||||||
|
|
||||||
|
chell = new li_attribute_template.Cintint(1, 2, 3);
|
||||||
|
|
||||||
|
|
||||||
|
function rassert(what, master) {
|
||||||
|
if (what != master) {
|
||||||
|
throw new Error("what: {}".format(what));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Testing primitive by value attribute
|
||||||
|
rassert(chell.a, 1);
|
||||||
|
|
||||||
|
chell.a = 3;
|
||||||
|
rassert(chell.a, 3);
|
||||||
|
|
||||||
|
// Testing primitive by ref attribute
|
||||||
|
|
||||||
|
rassert(chell.b, 2);
|
||||||
|
|
||||||
|
chell.b = 5;
|
||||||
|
rassert(chell.b, 5);
|
||||||
|
|
||||||
|
// Testing string
|
||||||
|
chell.str = "abc";
|
||||||
|
rassert(chell.str, "abc");
|
||||||
|
|
||||||
|
// Testing class by value
|
||||||
|
|
||||||
|
rassert(chell.d.value, 1);
|
||||||
|
|
||||||
|
chell.d = new li_attribute_template.Foo(2);
|
||||||
|
rassert(chell.d.value, 2);
|
||||||
|
|
||||||
|
// Testing class by reference
|
||||||
|
|
||||||
|
rassert(chell.e.value, 2);
|
||||||
|
|
||||||
|
chell.e = new li_attribute_template.Foo(3);
|
||||||
|
rassert(chell.e.value, 3);
|
||||||
|
|
||||||
|
chell.e.value = 4;
|
||||||
|
rassert(chell.e.value, 4);
|
||||||
|
|
||||||
|
// Testing moderately complex template by value
|
||||||
|
rassert(chell.f.first, 1);
|
||||||
|
rassert(chell.f.second, 2);
|
||||||
|
|
||||||
|
pair = new li_attribute_template.pair_intint(3, 4);
|
||||||
|
chell.f = pair;
|
||||||
|
rassert(chell.f.first, 3);
|
||||||
|
rassert(chell.f.second, 4);
|
||||||
|
|
||||||
|
// Testing moderately complex template by ref
|
||||||
|
rassert(chell.g.first, 2);
|
||||||
|
rassert(chell.g.second, 3);
|
||||||
|
|
||||||
|
pair = new li_attribute_template.pair_intint(4, 5);
|
||||||
|
chell.g = pair;
|
||||||
|
rassert(chell.g.first, 4);
|
||||||
|
rassert(chell.g.second, 5);
|
||||||
|
|
||||||
|
chell.g.first = 6;
|
||||||
|
chell.g.second = 7;
|
||||||
|
rassert(chell.g.first, 6);
|
||||||
|
rassert(chell.g.second, 7);
|
|
@ -0,0 +1,37 @@
|
||||||
|
// In JS std::vector and std::list cannot behave as native containers
|
||||||
|
// because there is no overloading
|
||||||
|
var li_std_containers_int = require("li_std_containers_int");
|
||||||
|
|
||||||
|
function set_check(container, idx, value, size) {
|
||||||
|
container.set(idx, value);
|
||||||
|
if (container.get(idx) !== value)
|
||||||
|
throw new Error(
|
||||||
|
`Failed setting value at ${idx} in ${container.toString} to ${value}, got ${container.getitem(idx)}`);
|
||||||
|
if (container.size() != size)
|
||||||
|
throw new Error(`Expected a size of ${size}, got ${container.size()}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function err_check(container, idx, value, size) {
|
||||||
|
let fail = true;
|
||||||
|
try {
|
||||||
|
container.set(idx, value);
|
||||||
|
} catch {
|
||||||
|
fail = false;
|
||||||
|
}
|
||||||
|
if (fail) throw new Error(
|
||||||
|
`Expected an exception setting value at ${idx} in ${container.toString} to ${value}, got ${container.get(idx)}`);
|
||||||
|
if (container.size() != size)
|
||||||
|
throw new Error(`Expected a size of ${size}, got ${container.size()}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
var vector;
|
||||||
|
|
||||||
|
vector = new li_std_containers_int.vector_int();
|
||||||
|
err_check(vector, 0, 10, 0);
|
||||||
|
|
||||||
|
vector = new li_std_containers_int.vector_int(2);
|
||||||
|
set_check(vector, 0, 10, 2);
|
||||||
|
set_check(vector, 1, 0, 2);
|
||||||
|
err_check(vector, 2, 20, 2);
|
||||||
|
err_check(vector, 0, 'string', 2);
|
||||||
|
err_check(vector, 0, {}, 2);
|
|
@ -0,0 +1,13 @@
|
||||||
|
var li_std_map_member = require("li_std_map_member");
|
||||||
|
|
||||||
|
a = new li_std_map_member.mapita();
|
||||||
|
a.set(1, new li_std_map_member.TestA());
|
||||||
|
|
||||||
|
if ((a.get(1).i != 1)) {
|
||||||
|
throw new Error("a[1] != 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
a.get(1).i = 2;
|
||||||
|
if ((a.get(1).i != 2)) {
|
||||||
|
throw new Error("a[1] != 2");
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
// In JavaScript, std::map has very limited capabilities and no iterator at all
|
||||||
|
var li_std_map = require("li_std_map");
|
||||||
|
|
||||||
|
function set_check(container, idx, value, size) {
|
||||||
|
container.set(idx, value);
|
||||||
|
if (container.get(idx) !== value)
|
||||||
|
throw new Error(
|
||||||
|
`Failed setting value at ${idx} in ${container.toString} to ${value}, got ${container.getitem(idx)}`);
|
||||||
|
if (container.size() != size)
|
||||||
|
throw new Error(`Expected a size of ${size}, got ${container.size()}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function err_check(container, idx, value, size) {
|
||||||
|
let fail = true;
|
||||||
|
try {
|
||||||
|
container.set(idx, value);
|
||||||
|
} catch {
|
||||||
|
fail = false;
|
||||||
|
}
|
||||||
|
if (fail) throw new Error(
|
||||||
|
`Expected an exception setting value at ${idx} in ${container.toString} to ${value}, got ${container.get(idx)}`);
|
||||||
|
if (container.size() != size)
|
||||||
|
throw new Error(`Expected a size of ${size}, got ${container.size()}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
var map;
|
||||||
|
|
||||||
|
map = new li_std_map.IntIntMap();
|
||||||
|
set_check(map, 0, 10, 1);
|
||||||
|
set_check(map, 1, 0, 2);
|
||||||
|
set_check(map, 2, 20, 3);
|
||||||
|
err_check(map, 0, 'string', 3);
|
||||||
|
|
||||||
|
if (!map.has_key(2)) throw new Error('Expected key to be found');
|
||||||
|
if (map.has_key(5)) throw new Error('Expected key to not be found');
|
||||||
|
map.del(2);
|
||||||
|
if (map.has_key(2)) throw new Error('Expected key to not be found');
|
||||||
|
|
||||||
|
|
||||||
|
map = new li_std_map.StringIntMap();
|
||||||
|
set_check(map, '0', 10, 1);
|
||||||
|
set_check(map, '1', 0, 2);
|
||||||
|
set_check(map, '2', 20, 3);
|
||||||
|
err_check(map, '0', 'string', 3);
|
||||||
|
|
||||||
|
if (!map.has_key('2')) throw new Error('Expected key to be found');
|
||||||
|
if (map.has_key('5')) throw new Error('Expected key to not be found');
|
||||||
|
map.del('2');
|
||||||
|
if (map.has_key('2')) throw new Error('Expected key to not be found');
|
|
@ -0,0 +1,46 @@
|
||||||
|
var li_std_pair = require("li_std_pair");
|
||||||
|
|
||||||
|
function check(flag) {
|
||||||
|
if (!flag) {
|
||||||
|
throw new Error("Check failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
intPair = li_std_pair.makeIntPair(7, 6);
|
||||||
|
check(typeof intPair === 'object');
|
||||||
|
check(Object.keys(intPair).length == 2);
|
||||||
|
check(intPair.first === 7);
|
||||||
|
check(intPair.second === 6);
|
||||||
|
|
||||||
|
intPairConstRef = li_std_pair.makeIntPairConstRef(7, 6);
|
||||||
|
check(typeof intPairConstRef === 'object');
|
||||||
|
check(intPairConstRef.first === 7);
|
||||||
|
check(intPairConstRef.second === 6);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Each of these should return a reference to a wrapped
|
||||||
|
// std:: pair < int, int > object(i.e.an intPair instance).
|
||||||
|
intPairPtr = li_std_pair.makeIntPairPtr(7, 6);
|
||||||
|
check(typeof intPairPtr === 'object');
|
||||||
|
check(intPairPtr.first === 7);
|
||||||
|
check(intPairPtr.second === 6);
|
||||||
|
|
||||||
|
intPairRef = li_std_pair.makeIntPairRef(7, 6);
|
||||||
|
check(typeof intPairRef === 'object');
|
||||||
|
check(intPairRef.first === 7);
|
||||||
|
check(intPairRef.second === 6);
|
||||||
|
|
||||||
|
// Now test various input typemaps.Each of the wrapped C++ functions
|
||||||
|
//(product1, product2 and product3) is expecting an argument of a
|
||||||
|
// different type(see li_std_pair.i).Typemaps should be in place to
|
||||||
|
// convert this tuple into the expected argument type.
|
||||||
|
check(li_std_pair.product1(intPair) === 42);
|
||||||
|
check(li_std_pair.product2(intPair) === 42);
|
||||||
|
// check(product3(intPair) == 42) # TODO, if (desirable to match Ruby wrappers behaviour.Requires equivalent to typemap(in) std:: pair * in Lib / ruby / std_pair.i and further fixes to stop recursive calls to swig:) {asptr which this testcase shows.Plus further changes for any type of sequence type(including other STL containers) to be accepted by all methods taking an STL container to match Ruby behaviour.
|
||||||
|
|
||||||
|
//
|
||||||
|
// Similarly, each of the input typemaps should know what to do
|
||||||
|
// with an intPair instance.
|
||||||
|
check(li_std_pair.product1(intPairPtr) === 42);
|
||||||
|
check(li_std_pair.product2(intPairPtr) === 42);
|
||||||
|
check(li_std_pair.product3(intPairPtr) === 42);
|
|
@ -0,0 +1,9 @@
|
||||||
|
var li_std_pair_using = require("li_std_pair_using");
|
||||||
|
|
||||||
|
one = new li_std_pair_using.StringStringPair("one", "numero uno");
|
||||||
|
two = new li_std_pair_using.StringIntPair("two", 2);
|
||||||
|
|
||||||
|
tuple = li_std_pair_using.bounce(one);
|
||||||
|
if (typeof tuple !== 'object' && tuple.first !== one.first || tuple.second !== one.second) {
|
||||||
|
throw new Error;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
var li_std_vector_enum = require("li_std_vector_enum");
|
||||||
|
|
||||||
|
|
||||||
|
function check(a, b) {
|
||||||
|
if ((a != b)) {
|
||||||
|
throw new Error("Not equal: ", a, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ev = new li_std_vector_enum.EnumVector();
|
||||||
|
|
||||||
|
check(ev.nums.get(0), 10);
|
||||||
|
check(ev.nums.get(1), 20);
|
||||||
|
check(ev.nums.get(2), 30);
|
||||||
|
|
||||||
|
expected = 10;
|
||||||
|
for (let i = 0; i < ev.nums.size(); i++) {
|
||||||
|
let val = ev.nums.get(i);
|
||||||
|
check(val, expected);
|
||||||
|
expected += 10;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
var li_std_vector = require("li_std_vector");
|
||||||
|
|
||||||
|
if (li_std_vector.typedef_test(101) != 101) {
|
||||||
|
throw new Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
let fail = false;
|
||||||
|
try {
|
||||||
|
sv = new li_std_vector.StructVector();
|
||||||
|
sv.add(null);
|
||||||
|
fail = true;
|
||||||
|
} catch { }
|
||||||
|
|
||||||
|
if (fail) throw new Error();
|
|
@ -5,8 +5,14 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
%include std_vector.i
|
%include std_vector.i
|
||||||
|
|
||||||
|
#ifndef SWIGJAVASCRIPT
|
||||||
%include std_list.i
|
%include std_list.i
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
%template(vector_int) std::vector<int>;
|
%template(vector_int) std::vector<int>;
|
||||||
%template(list_int) std::list<int>;
|
|
||||||
|
|
||||||
|
#ifndef SWIGJAVASCRIPT
|
||||||
|
%template(list_int) std::list<int>;
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue