Add unordered_{set|map} and set to Java
Add test suite Add to makefile Revert set change Fix java map test Fix some of the tests Fix unordered map test
This commit is contained in:
parent
902f3f0ac5
commit
0f18b430fb
11 changed files with 481 additions and 12 deletions
|
|
@ -44,6 +44,10 @@ CPP_TEST_CASES = \
|
|||
java_typemaps_proxy \
|
||||
java_typemaps_typewrapper \
|
||||
li_std_list \
|
||||
li_std_map \
|
||||
li_std_set \
|
||||
li_std_unordered_map \
|
||||
li_std_unordered_set \
|
||||
# li_boost_intrusive_ptr
|
||||
|
||||
CPP11_TEST_CASES = \
|
||||
|
|
|
|||
101
Examples/test-suite/java/li_std_map_runme.java
Normal file
101
Examples/test-suite/java/li_std_map_runme.java
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import li_std_map.*;
|
||||
|
||||
public class li_std_map_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("li_std_map");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String argv[]) throws Throwable
|
||||
{
|
||||
StringIntMap sim = new StringIntMap();
|
||||
IntIntMap iim = new IntIntMap();
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (1) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (2) failed");
|
||||
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (3) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (4) failed");
|
||||
|
||||
try {
|
||||
sim.get("key");
|
||||
throw new RuntimeException("Test (5) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
iim.get(1);
|
||||
throw new RuntimeException("Test (6) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
sim.set("key", 1);
|
||||
iim.set(1, 1);
|
||||
|
||||
if (sim.size() != 1) throw new RuntimeException("Test (7) failed");
|
||||
if (iim.size() != 1) throw new RuntimeException("Test (8) failed");
|
||||
|
||||
sim.del("key");
|
||||
iim.del(1);
|
||||
|
||||
if (sim.has_key("key")) throw new RuntimeException("Test (9) failed");
|
||||
if (iim.has_key(1)) throw new RuntimeException("Test (10) failed");
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (11) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (12) failed");
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (13) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (14) failed");
|
||||
|
||||
try {
|
||||
sim.del("key");
|
||||
throw new RuntimeException("Test (15) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
iim.del(1);
|
||||
throw new RuntimeException("Test (16) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
sim.set("key", 1);
|
||||
iim.set(1, 1);
|
||||
|
||||
if (sim.size() != 1) throw new RuntimeException("Test (17) failed");
|
||||
if (iim.size() != 1) throw new RuntimeException("Test (18) failed");
|
||||
|
||||
sim.clear();
|
||||
iim.clear();
|
||||
|
||||
if (sim.has_key("key")) throw new RuntimeException("Test (19) failed");
|
||||
if (iim.has_key(1)) throw new RuntimeException("Test (20) failed");
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (21) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (22) failed");
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (23) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (24) failed");
|
||||
|
||||
sim.set("key", 1);
|
||||
sim.set("key2", 2);
|
||||
iim.set(1, 1);
|
||||
iim.set(2, 2);
|
||||
|
||||
if (sim.get("key") != 1) throw new RuntimeException("Test (25) failed");
|
||||
if (sim.get("key2") != 2) throw new RuntimeException("Test (26) failed");
|
||||
if (iim.get(1) != 1) throw new RuntimeException("Test (27) failed");
|
||||
if (iim.get(2) != 2) throw new RuntimeException("Test (28) failed");
|
||||
|
||||
sim.set("key", 3);
|
||||
iim.set(1, 3);
|
||||
|
||||
if (sim.get("key") != 3) throw new RuntimeException("Test (29) failed");
|
||||
if (sim.get("key2") != 2) throw new RuntimeException("Test (30) failed");
|
||||
if (iim.get(1) != 3) throw new RuntimeException("Test (31) failed");
|
||||
if (iim.get(2) != 2) throw new RuntimeException("Test (32) failed");
|
||||
}
|
||||
}
|
||||
40
Examples/test-suite/java/li_std_set_runme.java
Normal file
40
Examples/test-suite/java/li_std_set_runme.java
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import li_std_set.*;
|
||||
|
||||
public class li_std_set_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("li_std_set");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String argv[]) throws Throwable
|
||||
{
|
||||
StringSet ss = new StringSet();
|
||||
|
||||
if (!ss.empty()) throw new RuntimeException("Test (1) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (2) failed");
|
||||
if (ss.has("key")) throw new RuntimeException("Test (3) failed");
|
||||
if (ss.erase("key")) throw new RuntimeException("Test (4) failed");
|
||||
|
||||
if (!ss.insert("key")) throw new RuntimeException("Test (5) failed");
|
||||
if (ss.insert("key")) throw new RuntimeException("Test (6) failed");
|
||||
if (!ss.has("key")) throw new RuntimeException("Test (7) failed");
|
||||
|
||||
if (!ss.erase("key")) throw new RuntimeException("Test (8) failed");
|
||||
if (!ss.empty()) throw new RuntimeException("Test (9) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (10) failed");
|
||||
|
||||
if (!ss.insert("key1")) throw new RuntimeException("Test (11) failed");
|
||||
if (!ss.insert("key2")) throw new RuntimeException("Test (12) failed");
|
||||
if (!ss.insert("key3")) throw new RuntimeException("Test (13) failed");
|
||||
if (ss.size() != 3) throw new RuntimeException("Test (14) failed");
|
||||
|
||||
ss.clear();
|
||||
if (!ss.empty()) throw new RuntimeException("Test (15) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (16) failed");
|
||||
}
|
||||
}
|
||||
101
Examples/test-suite/java/li_std_unordered_map_runme.java
Normal file
101
Examples/test-suite/java/li_std_unordered_map_runme.java
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import li_std_unordered_map.*;
|
||||
|
||||
public class li_std_unordered_map_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("li_std_unordered_map");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String argv[]) throws Throwable
|
||||
{
|
||||
StringIntUnorderedMap sim = new StringIntUnorderedMap();
|
||||
IntIntUnorderedMap iim = new IntIntUnorderedMap();
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (1) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (2) failed");
|
||||
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (3) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (4) failed");
|
||||
|
||||
try {
|
||||
sim.get("key");
|
||||
throw new RuntimeException("Test (5) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
iim.get(1);
|
||||
throw new RuntimeException("Test (6) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
sim.set("key", 1);
|
||||
iim.set(1, 1);
|
||||
|
||||
if (sim.size() != 1) throw new RuntimeException("Test (7) failed");
|
||||
if (iim.size() != 1) throw new RuntimeException("Test (8) failed");
|
||||
|
||||
sim.del("key");
|
||||
iim.del(1);
|
||||
|
||||
if (sim.has_key("key")) throw new RuntimeException("Test (9) failed");
|
||||
if (iim.has_key(1)) throw new RuntimeException("Test (10) failed");
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (11) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (12) failed");
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (13) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (14) failed");
|
||||
|
||||
try {
|
||||
sim.del("key");
|
||||
throw new RuntimeException("Test (15) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
try {
|
||||
iim.del(1);
|
||||
throw new RuntimeException("Test (16) failed");
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
}
|
||||
|
||||
sim.set("key", 1);
|
||||
iim.set(1, 1);
|
||||
|
||||
if (sim.size() != 1) throw new RuntimeException("Test (17) failed");
|
||||
if (iim.size() != 1) throw new RuntimeException("Test (18) failed");
|
||||
|
||||
sim.clear();
|
||||
iim.clear();
|
||||
|
||||
if (sim.has_key("key")) throw new RuntimeException("Test (19) failed");
|
||||
if (iim.has_key(1)) throw new RuntimeException("Test (20) failed");
|
||||
|
||||
if (!sim.empty()) throw new RuntimeException("Test (21) failed");
|
||||
if (!iim.empty()) throw new RuntimeException("Test (22) failed");
|
||||
if (sim.size() != 0) throw new RuntimeException("Test (23) failed");
|
||||
if (iim.size() != 0) throw new RuntimeException("Test (24) failed");
|
||||
|
||||
sim.set("key", 1);
|
||||
sim.set("key2", 2);
|
||||
iim.set(1, 1);
|
||||
iim.set(2, 2);
|
||||
|
||||
if (sim.get("key") != 1) throw new RuntimeException("Test (25) failed");
|
||||
if (sim.get("key2") != 2) throw new RuntimeException("Test (26) failed");
|
||||
if (iim.get(1) != 1) throw new RuntimeException("Test (27) failed");
|
||||
if (iim.get(2) != 2) throw new RuntimeException("Test (28) failed");
|
||||
|
||||
sim.set("key", 3);
|
||||
iim.set(1, 3);
|
||||
|
||||
if (sim.get("key") != 3) throw new RuntimeException("Test (29) failed");
|
||||
if (sim.get("key2") != 2) throw new RuntimeException("Test (30) failed");
|
||||
if (iim.get(1) != 3) throw new RuntimeException("Test (31) failed");
|
||||
if (iim.get(2) != 2) throw new RuntimeException("Test (32) failed");
|
||||
}
|
||||
}
|
||||
40
Examples/test-suite/java/li_std_unordered_set_runme.java
Normal file
40
Examples/test-suite/java/li_std_unordered_set_runme.java
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import li_std_unordered_set.*;
|
||||
|
||||
public class li_std_unordered_set_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("li_std_unordered_set");
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String argv[]) throws Throwable
|
||||
{
|
||||
StringUnorderedSet ss = new StringUnorderedSet();
|
||||
|
||||
if (!ss.empty()) throw new RuntimeException("Test (1) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (2) failed");
|
||||
if (ss.has("key")) throw new RuntimeException("Test (3) failed");
|
||||
if (ss.erase("key")) throw new RuntimeException("Test (4) failed");
|
||||
|
||||
if (!ss.insert("key")) throw new RuntimeException("Test (5) failed");
|
||||
if (ss.insert("key")) throw new RuntimeException("Test (6) failed");
|
||||
if (!ss.has("key")) throw new RuntimeException("Test (7) failed");
|
||||
|
||||
if (!ss.erase("key")) throw new RuntimeException("Test (8) failed");
|
||||
if (!ss.empty()) throw new RuntimeException("Test (9) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (10) failed");
|
||||
|
||||
if (!ss.insert("key1")) throw new RuntimeException("Test (11) failed");
|
||||
if (!ss.insert("key2")) throw new RuntimeException("Test (12) failed");
|
||||
if (!ss.insert("key3")) throw new RuntimeException("Test (13) failed");
|
||||
if (ss.size() != 3) throw new RuntimeException("Test (14) failed");
|
||||
|
||||
ss.clear();
|
||||
if (!ss.empty()) throw new RuntimeException("Test (15) failed");
|
||||
if (ss.size() != 0) throw new RuntimeException("Test (16) failed");
|
||||
}
|
||||
}
|
||||
|
|
@ -13,17 +13,18 @@
|
|||
|
||||
%include <std_string.i>
|
||||
%include <std_set.i>
|
||||
%include <std_multiset.i>
|
||||
%include <std_vector.i>
|
||||
|
||||
%template(set_string) std::set<std::string>;
|
||||
%template(set_int) std::multiset<int>;
|
||||
|
||||
|
||||
%template(v_int) std::vector<int>;
|
||||
|
||||
|
||||
|
||||
// Use language macros since Java doesn't have multiset support (yet)
|
||||
// and uses different naming conventions.
|
||||
#if defined(SWIGRUBY) || defined(SWIGPYTHON)
|
||||
%include <std_multiset.i>
|
||||
%template(set_int) std::multiset<int>;
|
||||
%template(v_int) std::vector<int>;
|
||||
%template(set_string) std::set<std::string>;
|
||||
#elif defined(SWIGJAVA)
|
||||
%template(StringSet) std::set<std::string>;
|
||||
#endif
|
||||
|
||||
#if defined(SWIGRUBY)
|
||||
%template(LanguageSet) std::set<swig::LANGUAGE_OBJ>;
|
||||
|
|
|
|||
12
Examples/test-suite/li_std_unordered_map.i
Normal file
12
Examples/test-suite/li_std_unordered_map.i
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
* A test of unordered_map containers.
|
||||
*/
|
||||
|
||||
%module li_std_unordered_map
|
||||
|
||||
%include <std_string.i>
|
||||
%include <std_unordered_map.i>
|
||||
|
||||
%template(IntIntUnorderedMap) std::unordered_map<int, int>;
|
||||
%template(StringIntUnorderedMap) std::unordered_map<std::string, int>;
|
||||
|
||||
11
Examples/test-suite/li_std_unordered_set.i
Normal file
11
Examples/test-suite/li_std_unordered_set.i
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
/*
|
||||
* A test of unordered_set containers.
|
||||
*/
|
||||
|
||||
%module li_std_unordered_set
|
||||
|
||||
%include <std_string.i>
|
||||
%include <std_unordered_set.i>
|
||||
|
||||
%template(StringUnorderedSet) std::unordered_set<std::string>;
|
||||
|
||||
47
Lib/java/std_set.i
Normal file
47
Lib/java/std_set.i
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* std_set.i
|
||||
*
|
||||
* SWIG typemaps for std::set
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
%include <std_common.i>
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// std::set
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
%{
|
||||
#include <set>
|
||||
%}
|
||||
|
||||
namespace std {
|
||||
|
||||
template <class KeyType>
|
||||
class set {
|
||||
public:
|
||||
set();
|
||||
set(const set<KeyType>&);
|
||||
|
||||
unsigned int size() const;
|
||||
bool empty() const;
|
||||
void clear();
|
||||
|
||||
%extend {
|
||||
// Returns whether item was inserted.
|
||||
bool insert(const KeyType& key) {
|
||||
return self->insert(key).second;
|
||||
}
|
||||
|
||||
// Returns whether set contains key.
|
||||
bool has(const KeyType& key) {
|
||||
return (self->count(key) > 0);
|
||||
}
|
||||
|
||||
// Returns whether the item was erased.
|
||||
bool erase(const KeyType& key) {
|
||||
return (self->erase(key) > 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
65
Lib/java/std_unordered_map.i
Normal file
65
Lib/java/std_unordered_map.i
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* std_unordered_map.i
|
||||
*
|
||||
* SWIG typemaps for std::unordered_map
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
%include <std_common.i>
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// std::unordered_map
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
%{
|
||||
#include <unordered_map>
|
||||
#include <stdexcept>
|
||||
%}
|
||||
|
||||
namespace std {
|
||||
|
||||
template<class KeyType, class MappedType> class unordered_map {
|
||||
public:
|
||||
typedef size_t size_type;
|
||||
typedef ptrdiff_t difference_type;
|
||||
typedef KeyType key_type;
|
||||
typedef MappedType mapped_type;
|
||||
unordered_map();
|
||||
unordered_map(const unordered_map<KeyType, MappedType>&);
|
||||
|
||||
unsigned int size() const;
|
||||
bool empty() const;
|
||||
void clear();
|
||||
|
||||
%extend {
|
||||
const MappedType& get(const KeyType& key) throw (std::out_of_range) {
|
||||
std::unordered_map<KeyType, MappedType>::iterator i = self->find(key);
|
||||
|
||||
if (i != self->end()) {
|
||||
return i->second;
|
||||
} else {
|
||||
throw std::out_of_range("key not found");
|
||||
}
|
||||
}
|
||||
|
||||
void set(const KeyType& key, const MappedType& x) {
|
||||
(*self)[key] = x;
|
||||
}
|
||||
|
||||
void del(const KeyType& key) throw (std::out_of_range) {
|
||||
std::unordered_map<KeyType, MappedType>::iterator i = self->find(key);
|
||||
|
||||
if (i != self->end()) {
|
||||
self->erase(i);
|
||||
} else {
|
||||
throw std::out_of_range("key not found");
|
||||
}
|
||||
}
|
||||
|
||||
bool has_key(const KeyType& key) {
|
||||
std::unordered_map<KeyType, MappedType>::iterator i = self->find(key);
|
||||
return i != self->end();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
47
Lib/java/std_unordered_set.i
Normal file
47
Lib/java/std_unordered_set.i
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* std_unordered_set.i
|
||||
*
|
||||
* SWIG typemaps for std::unordered_set
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
%include <std_common.i>
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// std::unordered_set
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
%{
|
||||
#include <unordered_set>
|
||||
%}
|
||||
|
||||
namespace std {
|
||||
|
||||
template <class KeyType>
|
||||
class unordered_set {
|
||||
public:
|
||||
unordered_set();
|
||||
unordered_set(const unordered_set<KeyType>&);
|
||||
|
||||
unsigned int size() const;
|
||||
bool empty() const;
|
||||
void clear();
|
||||
|
||||
%extend {
|
||||
// Returns whether item was inserted.
|
||||
bool insert(const KeyType& key) {
|
||||
return self->insert(key).second;
|
||||
}
|
||||
|
||||
// Returns whether set contains key.
|
||||
bool has(const KeyType& key) {
|
||||
return (self->count(key) > 0);
|
||||
}
|
||||
|
||||
// Returns whether the item was erased.
|
||||
bool erase(const KeyType& key) {
|
||||
return (self->erase(key) > 0);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
Loading…
Add table
Add a link
Reference in a new issue