1 ! Copyright (C) 2019 Alexander Ilin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors endian kernel math namespaces sequences
4 strings tools.test ulid ulid.private ;
7 { "0123456789ABCDEFGH1JK1MN0PQRSTUVWXYZ" }
8 [ "0123456789abcdefghijklmnopqrstuvwxyz" normalize-ulid ] unit-test
10 { "ABCDEFGH1JK1MN0PQRSTUVWXYZ" }
11 [ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" normalize-ulid ] unit-test
13 [ "aoeu" ulid>bytes ] [
14 [ ulid>bytes-bad-length? ] keep n>> 4 = and
17 [ "aBCDEFGH1JK1MN0PQRSTUVWXYZ" ulid>bytes ] [
18 [ ulid>bytes-bad-character? ] keep ch>> CHAR: a = and
21 [ "ABCDEFGH1JK1MN0PQRSTUVWXYZ" ulid>bytes ] [
22 [ ulid>bytes-bad-character? ] keep ch>> CHAR: U = and
25 [ "ABCDEFGH1JK1MN0PQRST0VWXYZ" ulid>bytes ]
26 [ ulid>bytes-overflow? ] must-fail-with
28 { B{ 235 99 92 248 68 50 152 105 80 90 248 206 129 190 119 223 } }
29 [ "7BCDEFGH1JK1MN0PQRST0VWXYZ" ulid>bytes ] unit-test
31 { "7BCDEFGH1JK1MN0PQRST0VWXYZ" }
32 [ B{ 235 99 92 248 68 50 152 105 80 90 248 206 129 190 119 223 } bytes>ulid ] unit-test
34 [ B{ 235 99 92 248 68 50 152 105 80 90 248 206 129 190 119 } bytes>ulid ] [
35 [ bytes>ulid-bad-length? ] keep n>> 15 = and
38 { t } [ ulid string? ] unit-test
39 { 26 } [ ulid length ] unit-test
40 { f } [ ulid ulid = ] unit-test
42 : ulid-less-than-80-bits ( -- ulid )
43 ulid last-random-bits get 80-bits >=
44 [ drop ulid-less-than-80-bits ] when ;
47 ulid-less-than-80-bits t (ulid) [ ulid>bytes be> ] bi@ 1 - =
50 [ 80-bits \ last-random-bits set t (ulid) ]
51 [ ulid-overflow? ] must-fail-with