]> git.mxchange.org Git - simgear.git/blob - simgear/nasal/cppbind/cppbind_test.cxx
Add from_nasal helper and fix to_nasal for std::vector.
[simgear.git] / simgear / nasal / cppbind / cppbind_test.cxx
1 #include "NasalHash.hxx"
2 #include "from_nasal.hxx"
3 #include "to_nasal.hxx"
4
5 #include <cstring>
6 #include <iostream>
7
8 #define VERIFY(a) \
9   if( !(a) ) \
10   { \
11     std::cerr << "failed:" << #a << std::endl; \
12     return 1; \
13   }
14
15 int main(int argc, char* argv[])
16 {
17   naContext c = naNewContext();
18   naRef r;
19
20   using namespace nasal;
21
22   r = to_nasal(c, "Test");
23   VERIFY( strncmp("Test", naStr_data(r), naStr_len(r)) == 0 );
24   VERIFY( from_nasal<std::string>(c, r) == "Test" );
25
26   r = to_nasal(c, std::string("Test"));
27   VERIFY( strncmp("Test", naStr_data(r), naStr_len(r)) == 0 );
28   VERIFY( from_nasal<std::string>(c, r) == "Test" );
29
30   r = to_nasal(c, 42);
31   VERIFY( naNumValue(r).num == 42 );
32   VERIFY( from_nasal<int>(c, r) == 42 );
33
34   r = to_nasal(c, 4.2f);
35   VERIFY( naNumValue(r).num == 4.2f );
36   VERIFY( from_nasal<float>(c, r) == 4.2f );
37
38   std::vector<int> vec;
39   r = to_nasal(c, vec);
40
41   r = to_nasal(c, "string");
42   try
43   {
44     from_nasal<int>(c, r);
45
46     std::cerr << "failed: Expected bad_nasal_cast to be thrown" << std::endl;
47     return 1;
48   }
49   catch(nasal::bad_nasal_cast&)
50   {}
51
52   Hash hash(c);
53   hash.set("vec", r);
54   hash.set("vec2", vec);
55   hash.set("name", "my-name");
56   hash.set("string", std::string("blub"));
57
58   r = to_nasal(c, hash);
59   VERIFY( naIsHash(r) );
60
61   Hash mod = hash.createHash("mod");
62   mod.set("parent", hash);
63
64   naFreeContext(c);
65
66   return 0;
67 }