/+ *test :: =, contain :: |% ++ test-basic-clock :: =| c=(clock @u tape) :: make max-size reasonable for testing :: =. max-size.c 3 :: specialize type :: =+ by-clock=(by-clock @u tape) :: ensure we get a single key we put in :: =. c (~(put by-clock c) 1 "one") =^ maybe1 c (~(get by-clock c) 1) =/ results1 %+ expect-eq !> [~ "one"] !> maybe1 :: =/ results2 %+ expect-eq !> 1 !> size.c :: push that key out of the cache :: =. c (~(put by-clock c) 2 "two") =. c (~(put by-clock c) 3 "three") =. c (~(put by-clock c) 4 "four") :: =/ results3 %+ expect-eq !> 3 !> size.c :: =^ maybe2 c (~(get by-clock c) 1) =/ results4 %+ expect-eq !> ~ !> maybe2 :: ;: weld results1 results2 results3 results4 == :: ++ test-clock-purge :: =| c=(clock @u tape) :: make max-size reasonable for testing :: =. max-size.c 3 :: specialize type :: =+ by-clock=(by-clock @u tape) :: fill the clock :: =. c (~(put by-clock c) 1 "one") =. c (~(put by-clock c) 2 "two") =. c (~(put by-clock c) 3 "three") :: purge the entire clock :: =. c ~(purge by-clock c) :: ;: weld %+ expect-eq !> 0 !> size.c :: %+ expect-eq !> 3 !> max-size.c :: %+ expect-eq !> ~ !> lookup.c :: %+ expect-eq !> ~ !> queue.c == :: ++ test-clock-trim :: =| c=(clock @u tape) :: make max-size reasonable for testing :: =. max-size.c 3 :: specialize type :: =+ by-clock=(by-clock @u tape) :: fill the clock :: =. c (~(put by-clock c) 1 "one") =. c (~(put by-clock c) 2 "two") =. c (~(put by-clock c) 3 "three") :: trim 2/3 of the clock :: =. c (~(trim by-clock c) 2) :: ;: weld %+ expect-eq !> 1 !> size.c :: =^ results1 c (~(get by-clock c) 3) %+ expect-eq !> [~ "three"] !> results1 :: %+ expect-eq !> 1 !> ~(wyt by lookup.c) == :: ++ test-clock-resized-to-zero :: =| c=(clock @u tape) :: make max-size reasonable for testing :: =. max-size.c 3 :: specialize type :: =+ by-clock=(by-clock @u tape) :: fill the clock :: =. c (~(put by-clock c) 1 "one") =. c (~(put by-clock c) 2 "two") =. c (~(put by-clock c) 3 "three") :: resize the clock so it has zero elements :: =. c (~(resize by-clock c) 0) :: =/ results1 %+ expect-eq !> 0 !> size.c :: =/ results2 %+ expect-eq !> ~ !> lookup.c :: =/ results3 %+ expect-eq !> ~ !> queue.c :: =/ results4 %+ expect-eq !> 0 !> max-size.c :: trying to get an element just returns ~ :: =^ maybe1 c (~(get by-clock c) 3) =/ results5 %+ expect-eq !> ~ !> maybe1 :: trying to put an element in doesn't mutate the clock :: =. c (~(put by-clock c) 4 "four") :: =/ results6 %+ expect-eq !> 0 !> size.c :: ;: weld results1 results2 results3 results4 results5 results6 == --