aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorgenotrance <dev@genotrance.com>2020-04-26 11:29:27 -0500
committerGitHub <noreply@github.com>2020-04-26 11:29:27 -0500
commit73ef7c4ccdcdc0934280f002af23ba663bf38426 (patch)
treefacee03b526d1991cdd25f1742e7f9a841cfc899 /tests
parent43dd43e3183178e71abd3319290c566cb4dd80a9 (diff)
parent89c10c4b25226a88062d01e6bf57a9e9146920c5 (diff)
downloadnimterop-73ef7c4ccdcdc0934280f002af23ba663bf38426.tar.gz
nimterop-73ef7c4ccdcdc0934280f002af23ba663bf38426.zip
Merge pull request #191 from jyapayne/poc_print_ast
[ast2] Enable parsing some C Macro expressions to Nim expressions using treesitter
Diffstat (limited to 'tests')
-rw-r--r--tests/include/tast2.h36
-rw-r--r--tests/tast2.nim56
-rw-r--r--tests/tmath.nim6
3 files changed, 93 insertions, 5 deletions
diff --git a/tests/include/tast2.h b/tests/include/tast2.h
index bdf8823..b47a801 100644
--- a/tests/include/tast2.h
+++ b/tests/include/tast2.h
@@ -8,6 +8,42 @@ extern "C" {
#define D "hello"
#define E 'c'
+#define UEXPR (1234u << 1)
+#define ULEXPR (1234ul << 2)
+#define ULLEXPR (1234ull << 3)
+#define LEXPR (1234l << 4)
+#define LLEXPR (1234ll << 5)
+
+#define SHL1 (1u << 1)
+#define SHL2 (1u << 2)
+#define SHL3 (1u << 3)
+#define COERCE 645635634896ull + 35436
+#define COERCE2 645635634896 + 35436ul
+#define BINEXPR ~(-(1u << !-1)) ^ (10 >> 1)
+#define BOOL true
+#define MATHEXPR (1 + 2/3*20 - 100)
+#define ANDEXPR (100 & 11000)
+#define CASTEXPR (char) 34
+#define AVAL 100
+#define BVAL 200
+#define EQ1 AVAL <= BVAL
+#define EQ2 AVAL >= BVAL
+#define EQ3 AVAL > BVAL
+#define EQ4 AVAL < BVAL
+#define EQ5 AVAL != BVAL
+#define EQ6 AVAL == BVAL
+
+#define SIZEOF sizeof(char)
+#define REG_STR "regular string"
+#define NOTSUPPORTEDSTR "not a " REG_STR
+
+#define NULLCHAR '\0'/* comments should not break things*/
+#define OCTCHAR '\012' // nor should this comment
+#define HEXCHAR '\xFE'
+#define TRICKYSTR "\x4E\034\nfoo\0\'\"\r\v\a\b\e\f\t\\\?bar"
+
+#define ALLSHL (SHL1 | SHL2 | SHL3)
+
struct A0;
struct A1 {};
typedef struct A2;
diff --git a/tests/tast2.nim b/tests/tast2.nim
index e13c4ac..4cfbeac 100644
--- a/tests/tast2.nim
+++ b/tests/tast2.nim
@@ -3,6 +3,10 @@ import macros, os, sets, strutils
import nimterop/[cimport]
static:
+ # Skip casting on lower nim compilers because
+ # the VM does not support it
+ when (NimMajor, NimMinor, NimPatch) < (1, 0, 0):
+ cSkipSymbol @["CASTEXPR"]
cDebug()
const
@@ -93,11 +97,11 @@ macro testFields(t: typed, fields: static[string] = "") =
for i in 0 ..< rl.len:
let
name = ($rl[i][0]).strip(chars = {'*'})
- typ = ($(rl[i][1].repr())).replace("\n", "").replace(" ", "")
+ typ = ($(rl[i][1].repr())).replace("\n", "").replace(" ", "").replace("typeof", "type")
n = names.find(name)
assert n != -1, $t & "." & name & " invalid"
- assert types[n] == typ,
- "typeof(" & $t & ":" & name & ") != " & types[n] & ", is " & typ
+ assert types[n].replace("typeof", "type") == typ,
+ "typeof(" & $t & ":" & name & ") != " & types[n].replace("typeof", "type") & ", is " & typ
assert A == 2
assert B == 1.0
@@ -105,6 +109,48 @@ assert C == 0x10
assert D == "hello"
assert E == 'c'
+assert not defined(NOTSUPPORTEDSTR)
+
+assert UEXPR == (1234.uint shl 1)
+assert ULEXPR == (1234.uint32 shl 2)
+assert ULLEXPR == (1234.uint64 shl 3)
+assert LEXPR == (1234.int32 shl 4)
+assert LLEXPR == (1234.int64 shl 5)
+
+assert AVAL == 100
+assert BVAL == 200
+
+assert EQ1 == (AVAL <= BVAL)
+assert EQ2 == (AVAL >= BVAL)
+assert EQ3 == (AVAL > BVAL)
+assert EQ4 == (AVAL < BVAL)
+assert EQ5 == (AVAL != BVAL)
+assert EQ6 == (AVAL == BVAL)
+
+assert SIZEOF == 1
+
+assert COERCE == 645635670332'u64
+assert COERCE2 == 645635670332'i64
+
+assert BINEXPR == 5
+assert BOOL == true
+assert MATHEXPR == -99
+assert ANDEXPR == 96
+
+when (NimMajor, NimMinor, NimPatch) >= (1, 0, 0):
+ assert CASTEXPR == 34.chr
+
+assert TRICKYSTR == "N\x1C\nfoo\x00\'\"\c\v\a\b\e\f\t\\\\?bar"
+assert NULLCHAR == '\0'
+assert OCTCHAR == '\n'
+assert HEXCHAR.int == 0xFE
+
+assert SHL1 == (1.uint shl 1)
+assert SHL2 == (1.uint shl 2)
+assert SHL3 == (1.uint shl 3)
+
+assert ALLSHL == (SHL1 or SHL2 or SHL3)
+
assert A0 is object
testFields(A0, "f1!cint")
checkPragmas(A0, pHeaderBy, istype = false)
@@ -271,7 +317,7 @@ var a21p: A21p
a21p = addr a20
assert A22 is object
-testFields(A22, "f1|f2!ptr ptr cint|array[123 + 132, ptr cint]")
+testFields(A22, "f1|f2!ptr ptr cint|array[123 + type(123)(132), ptr cint]")
checkPragmas(A22, pHeaderBy, istype = false)
var a22: A22
a22.f1 = addr a15.a2[0]
@@ -427,4 +473,4 @@ checkPragmas(nested, pHeaderImpBy)
when defined(HEADER):
assert sitest1(5) == 10
- assert sitest1(10) == 20 \ No newline at end of file
+ assert sitest1(10) == 20
diff --git a/tests/tmath.nim b/tests/tmath.nim
index 5d84700..b8477c1 100644
--- a/tests/tmath.nim
+++ b/tests/tmath.nim
@@ -13,6 +13,12 @@ when defined(windows):
complex = object
static:
+ when (NimMajor, NimMinor, NimPatch) < (1, 0, 0):
+ # FP_ILOGB0 and FP_ILOGBNAN are casts that are unsupported
+ # on lower Nim VMs
+ cSkipSymbol @["math_errhandling", "FP_ILOGB0", "FP_ILOGBNAN"]
+ else:
+ cSkipSymbol @["math_errhandling"]
cDebug()
cDisableCaching()
cAddStdDir()