]> Nishi Git Mirror - gwion.git/commitdiff
:white_check_mark: Thorough plug testing
authorfennecdjay <fennecdjay@gwion.tk>
Thu, 5 Nov 2020 15:01:24 +0000 (16:01 +0100)
committerfennecdjay <fennecdjay@gwion.tk>
Thu, 5 Nov 2020 15:01:24 +0000 (16:01 +0100)
14 files changed:
src/arg.c
src/import/import_internals.c
src/plug.c
tests/driver/non_driver.c [new file with mode: 0644]
tests/error/require_fail.gw [new file with mode: 0644]
tests/module/get_module.c
tests/module/get_module.gw [new file with mode: 0644]
tests/plug/coverage.gw
tests/plug/deps.c [new file with mode: 0644]
tests/plug/deps.gw [new file with mode: 0644]
tests/plug/test.log [deleted file]
tests/sh/import.sh
tests/sh/opt.sh
tests/struct/struct_template.gw

index 495c457710b2143704a85d78b3ea9e146016d31e..be2c1e95d531686ba1dd7603daac3085e1914c0a 100644 (file)
--- a/src/arg.c
+++ b/src/arg.c
@@ -78,14 +78,7 @@ ANN2(1) static void module_arg(const Map map, m_str str) {
     *val = '\0';
     ++val;
   }
-  const m_str key = str;
-  for(m_uint i = 0; i < map_size(map); ++i) {
-    if(!strcmp(key, (m_str)VKEY(map, i))) {
-      free((m_str)VKEY(map, i));
-      break;
-    }
-  }
-  map_set(map, (vtype)key, (vtype)val);
+  map_set(map, (vtype)str, (vtype)val);
 }
 
 ANN m_bool _arg_parse(const Gwion gwion, Arg* arg) {
index 8ddc53b0a527520f474da1b4249ab5e6999809f1..56292c207fe05ea257108d255cc18b327abfb30c 100644 (file)
@@ -34,6 +34,8 @@ ANN m_bool gwi_run(const Gwion gwion, m_bool (*f)(const Gwi)) {
    OperCK oper = {};
    struct Gwi_ gwi = { .gwion=gwion, .loc=&loc, .oper=&oper };
    const m_bool ret = f(&gwi);
+   if(ret < 0)
+     gwi_reset(&gwi);
    gwion->env->name = name;
    return ret;
 }
index b7694be14e54b9841f53ae71ac1e0b1b64cde221..4104cf202b025f40db13c2e9497f70452f9d9f6e 100644 (file)
@@ -46,7 +46,6 @@ struct PlugHandle {
 typedef struct Plug_ {
   void *dl;
   void *self;
-  int mod;
   int imp;
 } *Plug;
 
@@ -131,9 +130,6 @@ ANN void set_module(const struct Gwion_ *gwion, const m_str name, void *const pt
   for(m_uint j = 0; j < map_size(map); ++j) {
     if(!strcmp(name, (m_str)VKEY(map, j))) {
       Plug plug = (Plug)VVAL(map, j);
-      if(plug->mod)
-        return;
-      plug->mod = 1;
       plug->self = ptr;
       return;
     }
diff --git a/tests/driver/non_driver.c b/tests/driver/non_driver.c
new file mode 100644 (file)
index 0000000..2c020b3
--- /dev/null
@@ -0,0 +1,14 @@
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "gwion_env.h"
+#include "vm.h"
+#include "gwion.h"
+#include "operator.h"
+#include "object.h"
+#include "instr.h"
+#include "import.h"
+
+GWION_IMPORT(end_class) {
+  (void)gwi;
+  return GW_OK;
+}
diff --git a/tests/error/require_fail.gw b/tests/error/require_fail.gw
new file mode 100644 (file)
index 0000000..01646ae
--- /dev/null
@@ -0,0 +1,4 @@
+#require NonExisting
+
+var ftbl f;
+<<< var SinOsc s >>>;
index 6387d7755266125d5b54705efc91f9699d6f4da0..3a27ad0538e351d22daf3a1ed3daa341e0a19ee6 100644 (file)
@@ -15,7 +15,7 @@
 
 GWMODINI(get_module) {
   puts(__func__);
-  return (void*)2;
+  return NULL;
 }
 
 GWMODEND(get_module) {
@@ -23,7 +23,8 @@ GWMODEND(get_module) {
 }
 
 GWION_IMPORT(dummy_module) {
-  CHECK_OB(get_module(gwi->gwion, "dummy_module"))
+  set_module(gwi->gwion, "get_module", (void*)1);
+  CHECK_OB(get_module(gwi->gwion, "get_module"))
   puts("test passed");
   get_module(gwi->gwion, "non_existant_module");
   return GW_OK;
diff --git a/tests/module/get_module.gw b/tests/module/get_module.gw
new file mode 100644 (file)
index 0000000..ef38782
--- /dev/null
@@ -0,0 +1,2 @@
+#require get_module
+<<< __file__ >>>;
index e0d54055995ba2679d866d343d404488052448bc..973b043488827bd06913b577c26821e064e43c6a 100644 (file)
@@ -1,4 +1,6 @@
 #require coverage
+#require coverage
+
 <<< var float f >>>;
 var Coverage c;
 c.s_i;
diff --git a/tests/plug/deps.c b/tests/plug/deps.c
new file mode 100644 (file)
index 0000000..7f57c64
--- /dev/null
@@ -0,0 +1,18 @@
+#include "gwion_util.h"
+#include "gwion_ast.h"
+#include "gwion_env.h"
+#include "vm.h"
+#include "object.h"
+#include "instr.h"
+#include "gwion.h"
+#include "operator.h"
+#include "import.h"
+#include "gwi.h"
+
+GWION_IMPORT(deps) {
+  (void)gwi;
+  return GW_OK;
+}
+
+static const m_str deps[] = { "array", NULL };
+GWDEPEND { return deps; }
diff --git a/tests/plug/deps.gw b/tests/plug/deps.gw
new file mode 100644 (file)
index 0000000..eda3576
--- /dev/null
@@ -0,0 +1,3 @@
+#require deps
+
+<<< __file__ >>>;
diff --git a/tests/plug/test.log b/tests/plug/test.log
deleted file mode 100644 (file)
index 87ce6cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-op_already_imported.gw 
index b102ec59c387275d0867fc8b034491589a718292..96a20e0d31d19bd3c71774a0f298880d0be38667 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# [test] #75
+# [test] #78
 
 n=0
 [ "$1" ] && n="$1"
@@ -16,7 +16,6 @@ test_plugin() {
        export PRG="../../gwion"
        export SUPP="../../scripts/supp"
        make
-# we might have a test file for all now
   if [ -f "$NAME.gw" ]
   then  GWOPT+="-p." test_gw "$NAME.gw" "$n"
   else  GWOPT+="-p." test_gw "no_file" "$n"
@@ -41,13 +40,17 @@ pushd tests/plug || exit
 for test_file in *.c
 do test_plugin "$(basename "$test_file" .c)"
 done
+PRG="../../gwion" make NAME="array"
+test_plugin "deps" "$n"
+make NAME="array" clean
 popd
 
+
 pushd tests/driver || exit
 for test_file in *.c
 do
  NAME="$(basename "$test_file" .c)"
GWOPT+="-d $NAME" test_plugin "$(basename "$test_file" .c)"
DRIVER="$NAME=some_arg" test_plugin "$(basename "$test_file" .c)"
 done
 popd || exit
 
@@ -55,7 +58,7 @@ pushd tests/module || exit
 for test_file in *.c
 do
  NAME="$(basename "$test_file" .c)"
GWOPT+="-m $NAME" test_plugin "$NAME"
MODULE="$NAME=some_arg" test_plugin "$NAME"
 done
 popd || exit
 
index 796fc58e372e65ea5e3ce737267233c7e57e32a0..f3f42e08f0ae7c46826f64a55a1a449ad291470a 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# [test] #20
+# [test] #21
 
 n=0
 [ "$1" ] && n="$1"
@@ -50,13 +50,15 @@ run "$n" "arg is a directory" "-p src" "file"
 
 # config
 n=$((n+1))
-RC=tmp_gwionrc
-cat << EOF >> "$RC"
+RC=./tmp_gwionrc
+cat << EOF > "$RC"
 -p.
 -l0
 EOF
-run "$n" "config" "-c $RC" "file"
-rm "$RC"
+run "$n" "config" "-c$RC" "file"
+./gwion -c ./tmp_gwionrc
+#GWOPT="-c ./$RC" run "$n" "config" "" "file"
+#rm "$RC"
 
 # loop
 n=$((n+1))
@@ -78,6 +80,10 @@ run "$n" "no pass" "-g nopass" "file"
 n=$((n+1))
 run "$n" "option needs argument" "-p" "file"
 
+# option needs argument
+n=$((n+1))
+echo "<<< __file__ >>>;" | run "$n" "stdin" "-" "file"
+
 # invalid global type
 n=$((n+1))
 run "$n" "invalid global type" "examples/complex/invalid_type0.gw examples/complex/invalid_type1.gw" "file"
index c9291cc23345c6590b718bd7fb876cbc2e5c1f34..a0b14b71c28f23c683d26d3d6b50ab259117f97c 100644 (file)
@@ -3,8 +3,8 @@ struct S:[A] {
   var A a1;
 }
 
-var D:[int] si;
-var D:[float] sf;
+var S:[int] si;
+var S:[float] sf;
 
 <<< si.a0 >>>;
 <<< sf.a0 >>>;