aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2020-03-10 14:12:18 -0500
committerGanesh Viswanathan <dev@genotrance.com>2020-03-10 14:12:18 -0500
commita7aa69f71df6cacf6b4923c1f16c4a0aa8c47d7b (patch)
tree462c7093f547940fdaf0635753c4398a9a35dd50 /tests
parentda9a1c983b02a0829e5054e23aab99ceacd6c79c (diff)
downloadnimterop-fast2.tar.gz
nimterop-fast2.zip
Merge newalgo branch ast2 functionalityfast2
Diffstat (limited to 'tests')
-rw-r--r--tests/include/tast2.h42
-rw-r--r--tests/tast2.nim71
2 files changed, 113 insertions, 0 deletions
diff --git a/tests/include/tast2.h b/tests/include/tast2.h
new file mode 100644
index 0000000..1a2789b
--- /dev/null
+++ b/tests/include/tast2.h
@@ -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 const 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 { volatile char a1; };
+struct A15 { char *a1; const 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; };
diff --git a/tests/tast2.nim b/tests/tast2.nim
new file mode 100644
index 0000000..ffdcd19
--- /dev/null
+++ b/tests/tast2.nim
@@ -0,0 +1,71 @@
+import tables
+
+import nimterop/[cimport]
+
+static:
+ cDebug()
+
+cImport("include/tast2.h", flags="-d -f:ast2")
+
+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