var char_binary = require("char_binary");

var t = new char_binary.Test();
if (t.strlen('hile') != 4) {
  throw("bad multi-arg typemap 1");
}
if (t.ustrlen('hile') != 4) {
  throw("bad multi-arg typemap 1");
}

if (t.strlen('hil\0') != 4) {
  throw("bad multi-arg typemap 2");
}
if (t.ustrlen('hil\0') != 4) {
  throw("bad multi-arg typemap 2");
}

if (t.strlen(null) != 0) {
  throw("bad multi-arg typemap null");
}
if (t.ustrlen(null) != 0) {
  throw("bad multi-arg typemap null");
}

/*
 *  creating a raw char*
 */
var pc = char_binary.new_pchar(5);
char_binary.pchar_setitem(pc, 0, 'h');
char_binary.pchar_setitem(pc, 1, 'o');
char_binary.pchar_setitem(pc, 2, 'l');
char_binary.pchar_setitem(pc, 3, 'a');
char_binary.pchar_setitem(pc, 4, 0);


if (t.strlen(pc) != 4) {
  throw("bad multi-arg typemap (3)");
}
if (t.ustrlen(pc) != 4) {
  throw("bad multi-arg typemap (3)");
}

char_binary.var_pchar = pc;
if (char_binary.var_pchar != "hola") {
  throw("bad pointer case (1)");
}

char_binary.var_namet = pc;
if (char_binary.var_namet != "hola") {
  throw("bad pointer case (2)");
}
char_binary.delete_pchar(pc);
