about summary refs log tree commit diff stats
path: root/subx/054string-equal.subx
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-05-25 00:39:16 -0700
committerKartik Agaram <vc@akkartik.com>2019-05-25 00:42:55 -0700
commit0b2d2d97284c41ad095e9dbbe6657b857af1c7b9 (patch)
treee4ac6975eaa864e9ceec17352179b9a04fdbc937 /subx/054string-equal.subx
parent7c06e10d9dc30c581d69fe0e935caf865beea13a (diff)
downloadmu-0b2d2d97284c41ad095e9dbbe6657b857af1c7b9.tar.gz
new primitive for tests: check-string-equal
Diffstat (limited to 'subx/054string-equal.subx')
-rw-r--r--subx/054string-equal.subx53
1 files changed, 53 insertions, 0 deletions
diff --git a/subx/054string-equal.subx b/subx/054string-equal.subx
index 6c23fccb..caeb0ea0 100644
--- a/subx/054string-equal.subx
+++ b/subx/054string-equal.subx
@@ -179,4 +179,57 @@ test-compare-inequal-strings-equal-lengths:
     81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
     c3/return
 
+# helper for later tests
+check-string-equal:  # s : (address string), expected : (address string), msg : (address string)
+    # . prolog
+    55/push-EBP
+    89/copy                         3/mod/direct    5/rm32/EBP    .           .             .           4/r32/ESP   .               .                 # copy ESP to EBP
+    # . save registers
+    50/push-EAX
+    # EAX = string-equal?(s, expected)
+    # . . push args
+    ff          6/subop/push        1/mod/*+disp8   5/rm32/EBP    .           .             .           .           0xc/disp8       .                 # push *(EBP+12)
+    ff          6/subop/push        1/mod/*+disp8   5/rm32/EBP    .           .             .           .           8/disp8         .                 # push *(EBP+8)
+    # . . call
+    e8/call  string-equal?/disp32
+    # . . discard args
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
+    # check-ints-equal(EAX, 1, msg)
+    # . . push args
+    ff          6/subop/push        1/mod/*+disp8   5/rm32/EBP    .           .             .           .           0x10/disp8      .                 # push *(EBP+16)
+    68/push  1/imm32
+    50/push-EAX
+    # . . call
+    e8/call  check-ints-equal/disp32
+    # . . discard args
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
+$check-string-equal:end:
+    # . restore registers
+    58/pop-to-EAX
+    # . epilog
+    89/copy                         3/mod/direct    4/rm32/ESP    .           .             .           5/r32/EBP   .               .                 # copy EBP to ESP
+    5d/pop-to-EBP
+    c3/return
+
+# test the helper
+test-check-string-equal:
+    # check-string-equal?("Abc", "Abc")
+    # . . push args
+    68/push  "Abc"/imm32
+    68/push  "Abc"/imm32
+    # . . call
+    e8/call  check-string-equal/disp32
+    # . . discard args
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               8/imm32           # add to ESP
+    # check-ints-equal(EAX, 1, msg)
+    # . . push args
+    68/push  "F - test-check-string-equal"/imm32
+    68/push  0/imm32/false
+    50/push-EAX
+    # . . call
+    e8/call  check-ints-equal/disp32
+    # . . discard args
+    81          0/subop/add         3/mod/direct    4/rm32/ESP    .           .             .           .           .               0xc/imm32         # add to ESP
+    c3/return
+
 # . . vim:nowrap:textwidth=0