WIP: full integration test
authorLukas Krickl <lukas@krickl.dev>
Sun, 26 Nov 2023 18:56:27 +0000 (19:56 +0100)
committerLukas Krickl <lukas@krickl.dev>
Sun, 26 Nov 2023 18:56:27 +0000 (19:56 +0100)
src/test.c
src/ulas.c

index 1fbdfc6b0b7a270b7a257ba6241fbd5a303c7157..27acf57be5e9d3843809358fd639090b836916b2 100644 (file)
@@ -301,10 +301,35 @@ void test_asminstr(void) {
   TESTEND("asminstr");
 }
 
+#define ULAS_FULLEN 0xFFFF
+
+#define ASSERT_FULL(expect_len, expect_rc, in_path, ...)                       \
+  {                                                                            \
+    ulaslstout = stdout;                                                       \
+    struct ulas_config cfg = ulas_cfg_from_env();                              \
+    char dstbuf[ULAS_FULLEN];                                                  \
+    char expect[] = {__VA_ARGS__};                                             \
+    memset(dstbuf, 0, ULAS_FULLEN);                                            \
+    ulasout = fmemopen(dstbuf, ULAS_FULLEN, "we");                             \
+    ulasin = fopen(in_path, "re");                                             \
+    assert(ulas_main(cfg) == expect_rc);                                       \
+    fclose(ulasout);                                                           \
+    for (int i = 0; i < expect_len; i++) {                                     \
+      assert(dstbuf[i] == expect[i]);                                          \
+    }                                                                          \
+    for (int i = expect_len; i < ULAS_FULLEN; i++) {                           \
+      assert(dstbuf[i] == 0);                                                  \
+    }                                                                          \
+    ulasin = stdin;                                                            \
+    ulasout = stdout;                                                          \
+  }
+
 // tests the entire stack
 void test_full(void) {
   TESTBEGIN("testfull");
 
+  ASSERT_FULL(2, 0, "tests/t0.s", 0, 0x76);
+
   TESTEND("testfull");
 }
 
@@ -321,9 +346,12 @@ int main(int arc, char **argv) {
   test_totok();
   test_intexpr();
   test_asminstr();
-  test_full();
 
   ulas_free();
 
+  // this will re-init everything on its own,
+  // so call after free
+  test_full();
+
   return 0;
 }
index 0b1509ef8db4b4edd6e211b4aaf0b83d0f14b5e7..a07be33b9fa4814e2b1616b34bc5515b9718d758 100644 (file)
@@ -1725,8 +1725,6 @@ const struct ulas_instr ULASINSTRS[] = {
 
     {NULL}};
 
-// assembles an instruction, writes bytes into dst
-// returns bytes written or -1 on error
 int ulas_asminstr(char *dst, unsigned long max, const char **line,
                   unsigned long n) {
   const char *start = *line;