Added asm instruction tests
authorLukas Krickl <lukas@krickl.dev>
Sun, 26 Nov 2023 15:14:38 +0000 (16:14 +0100)
committerLukas Krickl <lukas@krickl.dev>
Sun, 26 Nov 2023 15:14:38 +0000 (16:14 +0100)
include/ulas.h
src/test.c

index 8472fdd8e3757b0742b11462a51ae312e9335606..2a7d5a24bbd1628cba11759a9e58bddcd1b1b789 100644 (file)
@@ -469,6 +469,11 @@ void ulas_exprbuffree(struct ulas_exprbuf *eb);
  * Assembly step
  */
 
+// 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);
+
 // returns 0 if no more data can be read
 //         > 0 if data was read
 //         -1 on error
index 6264afaa625cbbbe0b6bcc873fa0c31d8dd10f0f..1fbdfc6b0b7a270b7a257ba6241fbd5a303c7157 100644 (file)
@@ -277,9 +277,27 @@ void test_intexpr(void) {
   TESTEND("intexpr");
 }
 
+#define ASSERT_ASMINSTR(expect_len, line, ...)                                 \
+  {                                                                            \
+    const char *l = line;                                                      \
+    int n = strlen(l);                                                         \
+    char dst[64];                                                              \
+    unsigned char expect_dst[] = {__VA_ARGS__};                                \
+    int res = ulas_asminstr(dst, 64, &l, n);                                   \
+    assert(res == expect_len);                                                 \
+    for (int i = 0; i < res; i++) {                                            \
+      assert(expect_dst[i] == (unsigned char)dst[i]);                          \
+    }                                                                          \
+  }
+
 void test_asminstr(void) {
   TESTBEGIN("asminstr");
 
+  ASSERT_ASMINSTR(1, "nop", 0x00);
+  ASSERT_ASMINSTR(1, "halt", 0x76);
+  ASSERT_ASMINSTR(1, "ld b, c", 0x41);
+  ASSERT_ASMINSTR(2, "ldh a, [1 + 2]", 0xF0, 0x03);
+
   TESTEND("asminstr");
 }