diff --git a/generators/nim/unit_generate_nim.ml b/generators/nim/unit_generate_nim.ml index 07bcd4c..ebebdc5 100644 --- a/generators/nim/unit_generate_nim.ml +++ b/generators/nim/unit_generate_nim.ml @@ -20,8 +20,11 @@ let strip_string s = Str.global_replace (Str.regexp "^[\r\n\t ]") "" rep let get_files glob = - let path = Filename.concat Config_pfff.path "/tests/generators/nim/" in - sort (Common2.glob (spf "%s/%s" path glob)) + try + let path = Filename.concat Config_pfff.path "/tests/generators/nim/" in + sort (Common2.glob (spf "%s/%s" path glob)) + with + Common2.CmdError (a, b) -> [] let basename fpath = let fullpath = Filename.concat Config_pfff.path "/tests/generators/nim//" in @@ -29,8 +32,9 @@ let basename fpath = let get_code_pairs name = let cglob = name ^ "*.c" in + let cppglob = name ^ "*.cpp" in let nimglob = name ^ "*.nim" in - let cfiles = get_files cglob + let cfiles = get_files cglob @ get_files cppglob and nimfiles = get_files nimglob in List.map2 (fun cfile nimfile -> let test_code = _gen_nim cfile in @@ -56,4 +60,9 @@ let unittest = tests "enums" "test_enum" @ tests "macros" "test_macro" @ tests "operators" "test_operator" @ + tests "expressions" "test_expression" @ + tests "arrays" "test_array" @ + tests "structs" "test_struct" @ + tests "casting" "test_cast" @ + tests "conditionals" "test_conditional" @ [] diff --git a/tests/generators/nim/test_array_access.c b/tests/generators/nim/test_array_access.c new file mode 100644 index 0000000..e7d3c99 --- /dev/null +++ b/tests/generators/nim/test_array_access.c @@ -0,0 +1,3 @@ +int main() { + a[i++]; +} diff --git a/tests/generators/nim/test_array_access.nim b/tests/generators/nim/test_array_access.nim new file mode 100644 index 0000000..3803010 --- /dev/null +++ b/tests/generators/nim/test_array_access.nim @@ -0,0 +1,2 @@ +proc main(): cint = + a[postInc(i)] diff --git a/tests/generators/nim/test_cast_simple.c b/tests/generators/nim/test_cast_simple.c new file mode 100644 index 0000000..b47f631 --- /dev/null +++ b/tests/generators/nim/test_cast_simple.c @@ -0,0 +1,3 @@ +int main() { + (double) 20; +} diff --git a/tests/generators/nim/test_cast_simple.nim b/tests/generators/nim/test_cast_simple.nim new file mode 100644 index 0000000..d13ab25 --- /dev/null +++ b/tests/generators/nim/test_cast_simple.nim @@ -0,0 +1,2 @@ +proc main(): cint = + cast[cdouble](20) diff --git a/tests/generators/nim/test_conditional_if.c b/tests/generators/nim/test_conditional_if.c new file mode 100644 index 0000000..1f0a572 --- /dev/null +++ b/tests/generators/nim/test_conditional_if.c @@ -0,0 +1,5 @@ +int main() { + if (a > b) { + printf("A is greater"); + } +} diff --git a/tests/generators/nim/test_conditional_if.nim b/tests/generators/nim/test_conditional_if.nim new file mode 100644 index 0000000..d67a90c --- /dev/null +++ b/tests/generators/nim/test_conditional_if.nim @@ -0,0 +1,3 @@ +proc main(): cint = + if(a > b): + printf("A is greater") diff --git a/tests/generators/nim/test_conditional_ifelse.c b/tests/generators/nim/test_conditional_ifelse.c new file mode 100644 index 0000000..cc4d110 --- /dev/null +++ b/tests/generators/nim/test_conditional_ifelse.c @@ -0,0 +1,8 @@ +int main() { + if (a > b) { + printf("A is greater"); + } + else { + printf("B is greater or equal"); + } +} diff --git a/tests/generators/nim/test_conditional_ifelse.nim b/tests/generators/nim/test_conditional_ifelse.nim new file mode 100644 index 0000000..62104ac --- /dev/null +++ b/tests/generators/nim/test_conditional_ifelse.nim @@ -0,0 +1,5 @@ +proc main(): cint = + if(a > b): + printf("A is greater") + else: + printf("B is greater or equal") diff --git a/tests/generators/nim/test_conditional_ifelseif.c b/tests/generators/nim/test_conditional_ifelseif.c new file mode 100644 index 0000000..1e0e6c0 --- /dev/null +++ b/tests/generators/nim/test_conditional_ifelseif.c @@ -0,0 +1,11 @@ +int main() { + if (a > b) { + printf("A is greater"); + } + else if (a == b) { + printf("A and B are equal"); + } + else { + printf("A is less than B"); + } +} diff --git a/tests/generators/nim/test_conditional_ifelseif.nim b/tests/generators/nim/test_conditional_ifelseif.nim new file mode 100644 index 0000000..bd8fa72 --- /dev/null +++ b/tests/generators/nim/test_conditional_ifelseif.nim @@ -0,0 +1,7 @@ +proc main(): cint = + if(a > b): + printf("A is greater") + elif(a == b): + printf("A and B are equal") + else: + printf("A is less than B") diff --git a/tests/generators/nim/test_expression_cond.c b/tests/generators/nim/test_expression_cond.c new file mode 100644 index 0000000..f3e8dae --- /dev/null +++ b/tests/generators/nim/test_expression_cond.c @@ -0,0 +1,3 @@ +int main() { + j = i < 0 ? -5 : 5; +} diff --git a/tests/generators/nim/test_expression_cond.nim b/tests/generators/nim/test_expression_cond.nim new file mode 100644 index 0000000..ebd42db --- /dev/null +++ b/tests/generators/nim/test_expression_cond.nim @@ -0,0 +1,2 @@ +proc main(): cint = + j = if i < 0: -5 else: 5 diff --git a/tests/generators/nim/test_expression_sizeof.c b/tests/generators/nim/test_expression_sizeof.c new file mode 100644 index 0000000..c1eb07b --- /dev/null +++ b/tests/generators/nim/test_expression_sizeof.c @@ -0,0 +1,3 @@ +int main() { + sizeof a; +} diff --git a/tests/generators/nim/test_expression_sizeof.nim b/tests/generators/nim/test_expression_sizeof.nim new file mode 100644 index 0000000..f0dbd29 --- /dev/null +++ b/tests/generators/nim/test_expression_sizeof.nim @@ -0,0 +1,2 @@ +proc main(): cint = + sizeof(a) diff --git a/tests/generators/nim/test_expression_sizeof_type.c b/tests/generators/nim/test_expression_sizeof_type.c new file mode 100644 index 0000000..428451f --- /dev/null +++ b/tests/generators/nim/test_expression_sizeof_type.c @@ -0,0 +1,3 @@ +int main() { + sizeof(int); +} diff --git a/tests/generators/nim/test_expression_sizeof_type.nim b/tests/generators/nim/test_expression_sizeof_type.nim new file mode 100644 index 0000000..e79d50d --- /dev/null +++ b/tests/generators/nim/test_expression_sizeof_type.nim @@ -0,0 +1,2 @@ +proc main(): cint = + sizeof(cint) diff --git a/tests/generators/nim/test_struct_record_access.c b/tests/generators/nim/test_struct_record_access.c new file mode 100644 index 0000000..bb0466d --- /dev/null +++ b/tests/generators/nim/test_struct_record_access.c @@ -0,0 +1,3 @@ +int main() { + a.twenty; +} diff --git a/tests/generators/nim/test_struct_record_access.nim b/tests/generators/nim/test_struct_record_access.nim new file mode 100644 index 0000000..4ad2721 --- /dev/null +++ b/tests/generators/nim/test_struct_record_access.nim @@ -0,0 +1,2 @@ +proc main(): cint = + a.twenty diff --git a/tests/generators/nim/test_struct_record_access_ptr.c b/tests/generators/nim/test_struct_record_access_ptr.c new file mode 100644 index 0000000..dc3004a --- /dev/null +++ b/tests/generators/nim/test_struct_record_access_ptr.c @@ -0,0 +1,3 @@ +int main() { + a->twenty; +} diff --git a/tests/generators/nim/test_struct_record_access_ptr.nim b/tests/generators/nim/test_struct_record_access_ptr.nim new file mode 100644 index 0000000..4ad2721 --- /dev/null +++ b/tests/generators/nim/test_struct_record_access_ptr.nim @@ -0,0 +1,2 @@ +proc main(): cint = + a.twenty