about summary refs log tree commit diff stats
path: root/baremetal/shell
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-02-12 21:59:35 -0800
committerKartik K. Agaram <vc@akkartik.com>2021-02-12 21:59:35 -0800
commitbe4b86e91be785eb7eaaeded9472fd97c12551d9 (patch)
tree00e5a071d48e9b9487ee7972ff61274a71d7ed5a /baremetal/shell
parent2ffd995524ef5dc7fee86136b3fa0cb8247fb6b7 (diff)
downloadmu-be4b86e91be785eb7eaaeded9472fd97c12551d9.tar.gz
7728
Diffstat (limited to 'baremetal/shell')
-rw-r--r--baremetal/shell/eval.mu30
1 files changed, 30 insertions, 0 deletions
diff --git a/baremetal/shell/eval.mu b/baremetal/shell/eval.mu
index 4352b540..64d60b98 100644
--- a/baremetal/shell/eval.mu
+++ b/baremetal/shell/eval.mu
@@ -261,3 +261,33 @@ fn test-eval-arithmetic {
   var n2/eax: int <- convert n
   check-ints-equal n2, 2, "F - test-eval-arithmetic result"
 }
+
+fn test-eval-string {
+  # in
+  var in-storage: line
+  var in/esi: (addr line) <- address in-storage
+  parse-line "\"abc\"", in
+  # end
+  var w-ah/eax: (addr handle word) <- get in, data
+  var end-h: (handle word)
+  var end-ah/ecx: (addr handle word) <- address end-h
+  final-word w-ah, end-ah
+  var end/eax: (addr word) <- lookup *end-ah
+  # out
+  var out-storage: value-stack
+  var out/edi: (addr value-stack) <- address out-storage
+  initialize-value-stack out, 8
+  #
+  evaluate in, end, out
+  #
+  var len/eax: int <- value-stack-length out
+  check-ints-equal len, 1, "F - test-eval-string stack size"
+  var out-data-ah/eax: (addr handle array value) <- get out, data
+  var out-data/eax: (addr array value) <- lookup *out-data-ah
+  var v/eax: (addr value) <- index out-data, 0
+  var type/ecx: (addr int) <- get v, type
+  check-ints-equal *type, 1/text, "F - test-eval-string type"
+  var text-ah/eax: (addr handle array byte) <- get v, text-data
+  var text/eax: (addr array byte) <- lookup *text-ah
+  check-strings-equal text, "abc", "F - test-eval-string result"
+}