Fixed dropping 0-length arrays, RB-Tree seems to work well now!

This commit is contained in:
Nathan Braswell
2022-05-08 19:38:44 -04:00
parent 7e7a7c3b32
commit 20d554dfe6
2 changed files with 54 additions and 51 deletions

View File

@@ -2373,11 +2373,14 @@
(then
(local.set '$i (i32.wrap_i64 (i64.shr_u (local.get '$it) (i64.const 32))))
(local.set '$tmp_ptr (local.get '$ptr))
(_loop '$l
(call '$drop (i64.load (local.get '$tmp_ptr)))
(local.set '$tmp_ptr (i32.add (local.get '$tmp_ptr) (i32.const 8)))
(local.set '$i (i32.sub (local.get '$i) (i32.const 1)))
(br_if '$l (i32.ne (i32.const 0) (local.get '$i)))
(block '$done
(_loop '$l
(br_if '$done (i32.eqz (local.get '$i)))
(call '$drop (i64.load (local.get '$tmp_ptr)))
(local.set '$tmp_ptr (i32.add (local.get '$tmp_ptr) (i32.const 8)))
(local.set '$i (i32.sub (local.get '$i) (i32.const 1)))
(br '$l)
)
)
)
(else

View File

@@ -290,53 +290,53 @@
(let (
first set-empty
;_ (log first " set-contains? " 1 " ? " (set-contains? first 1) " size " (size first))
;second (set-insert first 1)
;_ (log second " set-contains? " 1 " ? " (set-contains? second 1) " size " (size second))
;third (set-insert second 2)
;_ (log third " set-contains? " 1 " ? " (set-contains? third 1) " size " (size third))
;_ (log third " set-contains? " 2 " ? " (set-contains? third 2) " size " (size third))
;fourth (set-insert third 3)
;_ (log fourth " set-contains? " 1 " ? " (set-contains? fourth 1) " size " (size fourth))
;_ (log fourth " set-contains? " 2 " ? " (set-contains? fourth 2) " size " (size fourth))
;_ (log fourth " set-contains? " 3 " ? " (set-contains? fourth 3) " size " (size fourth))
;_ (log fourth " set-contains? " 4 " ? " (set-contains? fourth 4) " size " (size fourth))
;_ (log fourth " foldl with + " (set-foldl + 0 fourth))
;fifth (set-remove fourth 1)
;_ (log fifth " set-contains? " 1 " ? " (set-contains? fifth 1) " size " (size fifth))
;_ (log fifth " set-contains? " 2 " ? " (set-contains? fifth 2) " size " (size fifth))
;_ (log fifth " set-contains? " 3 " ? " (set-contains? fifth 3) " size " (size fifth))
;_ (log fifth " set-contains? " 4 " ? " (set-contains? fifth 4) " size " (size fifth))
;sixth (set-remove fifth 3)
;_ (log sixth " set-contains? " 1 " ? " (set-contains? sixth 1) " size " (size sixth))
;_ (log sixth " set-contains? " 2 " ? " (set-contains? sixth 2) " size " (size sixth))
;_ (log sixth " set-contains? " 3 " ? " (set-contains? sixth 3) " size " (size sixth))
;_ (log sixth " set-contains? " 4 " ? " (set-contains? sixth 4) " size " (size sixth))
;seventh (set-remove sixth 2)
;_ (log seventh " set-contains? " 1 " ? " (set-contains? seventh 1) " size " (size seventh))
;_ (log seventh " set-contains? " 2 " ? " (set-contains? seventh 2) " size " (size seventh))
;_ (log seventh " set-contains? " 3 " ? " (set-contains? seventh 3) " size " (size seventh))
;_ (log seventh " set-contains? " 4 " ? " (set-contains? seventh 4) " size " (size seventh))
_ (log first " set-contains? " 1 " ? " (set-contains? first 1) " size " (size first))
second (set-insert first 1)
_ (log second " set-contains? " 1 " ? " (set-contains? second 1) " size " (size second))
third (set-insert second 2)
_ (log third " set-contains? " 1 " ? " (set-contains? third 1) " size " (size third))
_ (log third " set-contains? " 2 " ? " (set-contains? third 2) " size " (size third))
fourth (set-insert third 3)
_ (log fourth " set-contains? " 1 " ? " (set-contains? fourth 1) " size " (size fourth))
_ (log fourth " set-contains? " 2 " ? " (set-contains? fourth 2) " size " (size fourth))
_ (log fourth " set-contains? " 3 " ? " (set-contains? fourth 3) " size " (size fourth))
_ (log fourth " set-contains? " 4 " ? " (set-contains? fourth 4) " size " (size fourth))
_ (log fourth " foldl with + " (set-foldl + 0 fourth))
fifth (set-remove fourth 1)
_ (log fifth " set-contains? " 1 " ? " (set-contains? fifth 1) " size " (size fifth))
_ (log fifth " set-contains? " 2 " ? " (set-contains? fifth 2) " size " (size fifth))
_ (log fifth " set-contains? " 3 " ? " (set-contains? fifth 3) " size " (size fifth))
_ (log fifth " set-contains? " 4 " ? " (set-contains? fifth 4) " size " (size fifth))
sixth (set-remove fifth 3)
_ (log sixth " set-contains? " 1 " ? " (set-contains? sixth 1) " size " (size sixth))
_ (log sixth " set-contains? " 2 " ? " (set-contains? sixth 2) " size " (size sixth))
_ (log sixth " set-contains? " 3 " ? " (set-contains? sixth 3) " size " (size sixth))
_ (log sixth " set-contains? " 4 " ? " (set-contains? sixth 4) " size " (size sixth))
seventh (set-remove sixth 2)
_ (log seventh " set-contains? " 1 " ? " (set-contains? seventh 1) " size " (size seventh))
_ (log seventh " set-contains? " 2 " ? " (set-contains? seventh 2) " size " (size seventh))
_ (log seventh " set-contains? " 3 " ? " (set-contains? seventh 3) " size " (size seventh))
_ (log seventh " set-contains? " 4 " ? " (set-contains? seventh 4) " size " (size seventh))
;first map-empty
;_ (log first " map-contains-key? " 1 " ? " (map-contains-key? first 1) " size " (size first))
;second (map-insert first 1 "hello")
;_ (log second " map-contains-key? " 1 " ? " (map-contains-key? second 1) " size " (size second))
;_ (log second " map-get " 1 " ? " (map-get second 1) " size " (size second))
;third (map-insert second 1 "goodbye")
;_ (log third " map-contains-key? " 1 " ? " (map-contains-key? third 1) " size " (size third))
;_ (log third " map-get " 1 " ? " (map-get third 1) " size " (size third))
;fourth (map-insert third 2 "hmmm")
;_ (log fourth " map-contains-key? " 2 " ? " (map-contains-key? fourth 2) " size " (size fourth))
;_ (log fourth " map-get " 2 " ? " (map-get fourth 2) " size " (size fourth))
;_ (log fourth " map-contains-key? " 1 " ? " (map-contains-key? fourth 1) " size " (size fourth))
;_ (log fourth " map-get " 1 " ? " (map-get fourth 1) " size " (size fourth))
;_ (log fourth " map-contains-key? " 3 " ? " (map-contains-key? fourth 3) " size " (size fourth))
;_ (log fourth " map-get-or-default " 3 " 'hi ? " (map-get-or-default fourth 3 'hi) " size " (size fourth))
;_ (log fourth " map-get-with-default " 3 " (lambda () 'bye) ? " (map-get-with-default fourth 3 (lambda () 'bye)) " size " (size fourth))
;fifth (map-remove fourth 2)
;_ (log fifth " map-contains-key? " 2 " ? " (map-contains-key? fifth 2) " size " (size fifth))
) (array 'exit (map-contains-key? first (read-string data))))
first map-empty
_ (log first " map-contains-key? " 1 " ? " (map-contains-key? first 1) " size " (size first))
second (map-insert first 1 "hello")
_ (log second " map-contains-key? " 1 " ? " (map-contains-key? second 1) " size " (size second))
_ (log second " map-get " 1 " ? " (map-get second 1) " size " (size second))
third (map-insert second 1 "goodbye")
_ (log third " map-contains-key? " 1 " ? " (map-contains-key? third 1) " size " (size third))
_ (log third " map-get " 1 " ? " (map-get third 1) " size " (size third))
fourth (map-insert third 2 "hmmm")
_ (log fourth " map-contains-key? " 2 " ? " (map-contains-key? fourth 2) " size " (size fourth))
_ (log fourth " map-get " 2 " ? " (map-get fourth 2) " size " (size fourth))
_ (log fourth " map-contains-key? " 1 " ? " (map-contains-key? fourth 1) " size " (size fourth))
_ (log fourth " map-get " 1 " ? " (map-get fourth 1) " size " (size fourth))
_ (log fourth " map-contains-key? " 3 " ? " (map-contains-key? fourth 3) " size " (size fourth))
_ (log fourth " map-get-or-default " 3 " 'hi ? " (map-get-or-default fourth 3 'hi) " size " (size fourth))
_ (log fourth " map-get-with-default " 3 " (lambda () 'bye) ? " (map-get-with-default fourth 3 (lambda () 'bye)) " size " (size fourth))
fifth (map-remove fourth 2)
_ (log fifth " map-contains-key? " 2 " ? " (map-contains-key? fifth 2) " size " (size fifth))
) (array 'exit (map-get fifth (read-string data))))
;(array 'exit (match (read-string data)