Fix type bugs, enable basic tests
This commit is contained in:
parent
166eae7a5a
commit
ee58be398a
6 changed files with 223 additions and 60 deletions
42
tests/include/test3.h
Normal file
42
tests/include/test3.h
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
|
||||
#define A 1
|
||||
#define B 1.0
|
||||
#define C 0x10
|
||||
#define D "hello"
|
||||
#define E 'c'
|
||||
|
||||
struct A0;
|
||||
struct A1 {};
|
||||
typedef struct A2;
|
||||
typedef struct A3 {};
|
||||
typedef struct A4 A4, *A4p;
|
||||
typedef int A5;
|
||||
typedef int *A6;
|
||||
typedef A0 **A7;
|
||||
typedef void *A8;
|
||||
|
||||
typedef char *A9[3];
|
||||
typedef char *A10[3][6];
|
||||
typedef char *(*A11)[3];
|
||||
|
||||
typedef int **(*A12)(int, int b, int *c, int *, int *count[4], int (*func)(int, int));
|
||||
typedef int A13(int, int);
|
||||
|
||||
struct A14 { char a1; };
|
||||
struct A15 { char *a1; int *a2[1]; };
|
||||
|
||||
typedef struct A16 { char f1; };
|
||||
typedef struct A17 { char *a1; int *a2[1]; } A18, *A18p;
|
||||
typedef struct { char *a1; int *a2[1]; } A19, *A19p;
|
||||
|
||||
typedef struct A20 { char a1; } A20, A21, *A21p;
|
||||
|
||||
//Expression
|
||||
//typedef struct A21 { int **f1; int abc[123+132]; } A21;
|
||||
|
||||
//Unions
|
||||
//union UNION1 {int f1; };
|
||||
//typedef union UNION2 { int **f1; int abc[123+132]; } UNION2;
|
||||
|
||||
// Anonymous
|
||||
//typedef struct { char a1; };
|
||||
71
tests/tnimterop2.nim
Normal file
71
tests/tnimterop2.nim
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import tables
|
||||
|
||||
import nimterop/[cimport]
|
||||
|
||||
static:
|
||||
cDebug()
|
||||
|
||||
cImport("include/test3.h", flags="-d")
|
||||
|
||||
proc testFields(t: typedesc, fields: Table[string, string] = initTable[string, string]()) =
|
||||
var
|
||||
obj: t
|
||||
count = 0
|
||||
for name, value in obj.fieldPairs():
|
||||
count += 1
|
||||
assert name in fields, $t & "." & name & " invalid"
|
||||
assert $fields[name] == $typeof(value),
|
||||
"typeof(" & $t & ":" & name & ") != " & fields[name] & ", is " & $typeof(value)
|
||||
assert count == fields.len, "Failed for " & $t
|
||||
|
||||
assert A == 1
|
||||
assert B == 1.0
|
||||
assert C == 0x10
|
||||
assert D == "hello"
|
||||
assert E == 'c'
|
||||
|
||||
assert A0 is object
|
||||
testFields(A0)
|
||||
assert A1 is object
|
||||
testFields(A1)
|
||||
assert A2 is object
|
||||
testFields(A2)
|
||||
assert A3 is object
|
||||
testFields(A3)
|
||||
assert A4 is object
|
||||
testFields(A4)
|
||||
assert A4p is ptr A4
|
||||
assert A5 is cint
|
||||
assert A6 is ptr cint
|
||||
assert A7 is ptr ptr A0
|
||||
assert A8 is pointer
|
||||
|
||||
assert A9 is array[3, cstring]
|
||||
assert A10 is array[3, array[6, cstring]]
|
||||
assert A11 is ptr array[3, cstring]
|
||||
|
||||
assert A12 is proc(a1: cint, b: cint, c: ptr cint, a4: ptr cint, count: array[4, ptr cint], `func`: proc(a1: cint, a2: cint): cint): ptr ptr cint
|
||||
assert A13 is proc(a1: cint, a2: cint): cint
|
||||
|
||||
assert A14 is object
|
||||
testFields(A14, {"a1": "cchar"}.toTable())
|
||||
|
||||
assert A15 is object
|
||||
testFields(A15, {"a1": "cstring", "a2": "array[0..0, ptr cint]"}.toTable())
|
||||
|
||||
assert A16 is object
|
||||
testFields(A16, {"f1": "cchar"}.toTable())
|
||||
|
||||
assert A17 is object
|
||||
testFields(A17, {"a1": "cstring", "a2": "array[0..0, ptr cint]"}.toTable())
|
||||
assert A18 is A17
|
||||
assert A18p is ptr A17
|
||||
|
||||
assert A19 is object
|
||||
testFields(A19, {"a1": "cstring", "a2": "array[0..0, ptr cint]"}.toTable())
|
||||
assert A19p is ptr A19
|
||||
|
||||
assert A20 is object
|
||||
testFields(A20, {"a1": "cchar"}.toTable())
|
||||
assert A21 is A20
|
||||
assert A21p is ptr A20
|
||||
Loading…
Add table
Add a link
Reference in a new issue