[OCaml] Don't use argout typemaps by default for some reference types

The OCaml module's typemaps.i supplied argout typemaps for some
reference types (e.g. int &) by default, which was unintuitive and
inconsistent when compared with other modules. The argout_ref example
depended on this, so add a typemap to argout_ref/example.i.

Add multiple runtime tests that deal with references.
This commit is contained in:
Zackery Spytz 2019-02-09 22:04:46 -07:00
commit b2d93665fe
8 changed files with 130 additions and 29 deletions

View file

@ -0,0 +1,13 @@
open Swig
open Funcptr_cpp
let _ =
let fp = _ADD_BY_VALUE '() in
assert (_call1 '(fp, 10, 11) as int = 21);
let fp = _ADD_BY_POINTER '() in
assert (_call2 '(fp, 12, 13) as int = 25);
let fp = _ADD_BY_REFERENCE '() in
assert (_call3 '(fp, 14, 15) as int = 29);
let fp = _ADD_BY_VALUE_C '() in
assert (_call1 '(fp, 2, 3) as int = 5);
;;

View file

@ -12,4 +12,15 @@ let _ =
assert (_boolfunction '(false) as string = "false");
assert (_intfunction '(true) as string = "int");
assert (_intfunction '(false) as string = "int");
assert (_overloaded_ref '(true) as string = "bool");
assert (_overloaded_ref '(false) as string = "bool");
assert (_overloaded_ref '(0) as string = "int");
assert (_overloaded_ref '(1) as string = "int");
assert (_overloaded_ref '(2) as string = "int");
assert (_overloaded_ref '("1234") as string = "string");
assert (_boolfunction_ref '(true) as string = "true");
assert (_boolfunction_ref '(false) as string = "false");
assert (_intfunction_ref '(true) as string = "int");
assert (_intfunction_ref '(false) as string = "int");
;;

View file

@ -0,0 +1,20 @@
open Swig
open Primitive_ref
let _ =
assert (_ref_int '(3) as int = 3);
assert (_ref_short '(3) as int = 3);
assert (_ref_ushort '(3) as int = 3);
assert (_ref_long '(3) as int = 3);
assert (_ref_ulong '(3) as int = 3);
assert (_ref_schar '(3) as int = 3);
assert (_ref_uchar '(3) as int = 3);
assert (_ref_float '(3.5) as float = 3.5);
assert (_ref_double '(3.5) as float = 3.5);
assert (_ref_bool '(true) as bool = true);
let arg = C_char 'x' in
assert (_ref_char '(arg) as char = 'x');
assert (_ref_over '(0) as int = 0);
let a = new_A '(12) in
assert (_ref_over '(a) as int = 12);
;;

View file

@ -0,0 +1,57 @@
open Swig
open Reference_global_vars
let _ =
let tc = _getconstTC '() in
assert (tc -> "[num]" () as int = 33);
let _ = _var_bool (_createref_bool (C_bool false)) in
assert (_value_bool (_var_bool '()) as bool = false);
let _ = _var_bool (_createref_bool (C_bool true)) in
assert (_value_bool (_var_bool '()) as bool = true);
let _ = _var_char (_createref_char (C_char 'w')) in
assert (_value_char (_var_char '()) as char = 'w');
let _ = _var_unsigned_char (_createref_unsigned_char (C_uchar 'w')) in
assert (_value_unsigned_char (_var_unsigned_char '()) as char = 'w');
let _ = _var_signed_char (_createref_signed_char (C_uchar 'w')) in
assert (_value_signed_char (_var_signed_char '()) as char = 'w');
let _ = _var_short (_createref_short (C_short 10)) in
assert (_value_short (_var_short '()) as int = 10);
let _ = _var_unsigned_short (_createref_unsigned_short (C_ushort 10)) in
assert (_value_unsigned_short (_var_unsigned_short '()) as int = 10);
let _ = _var_int (_createref_int (C_int 10)) in
assert (_value_int (_var_int '()) as int = 10);
let _ = _var_unsigned_int (_createref_unsigned_int (C_int 10)) in
assert (_value_unsigned_int (_var_unsigned_int '()) as int = 10);
let _ = _var_long (_createref_long (C_int64 10L)) in
assert (_value_long (_var_long '()) as int = 10);
let _ = _var_unsigned_long (_createref_unsigned_long (C_int64 10L)) in
assert (_value_unsigned_long (_var_unsigned_long '()) as int = 10);
let _ = _var_long_long (_createref_long_long (C_int64 0x6FFFFFFFFFFFFFF8L)) in
assert (_value_long_long (_var_long_long '()) = C_int64 0x6FFFFFFFFFFFFFF8L);
let _ = _var_unsigned_long_long (_createref_unsigned_long_long (C_int64 0x6FFFFFFFFFFFFFF8L)) in
assert (_value_unsigned_long_long (_var_unsigned_long_long '()) = C_int64 0x6FFFFFFFFFFFFFF8L);
let _ = _var_float (_createref_float (C_float 10.)) in
assert (_value_float (_var_float '()) as float = 10.);
let _ = _var_double (_createref_double (C_double 10.)) in
assert (_value_double (_var_double '()) as float = 10.);
let tc = new_TestClass '(20) in
let _ = _var_TestClass (_createref_TestClass (tc)) in
let tc = _value_TestClass (_var_TestClass '()) in
assert (tc -> "[num]" () as int = 20);
;;

View file

@ -0,0 +1,6 @@
open Swig
open Template_ref_type
let xr = new_XC '()
let y = new_Y '()
let _ = y -> find (xr)