-module(ids@cuid_test). -compile(no_auto_import). -export([gen_test/0, is_cuid_test/0, slug_test/0, is_slug_test/0]). gen_test() -> {ok, Channel} = ids@cuid:start(), gleam@should:be_true(check_collision(fun() -> ids@cuid:gen(Channel) end)), gleam@should:be_true( gleam@string:starts_with(ids@cuid:gen(Channel), <<"c"/utf8>>) ). is_cuid_test() -> gleam@should:be_false(ids@cuid:is_cuid(<<"random"/utf8>>)), gleam@should:be_true(ids@cuid:is_cuid(<<"ckgr2o7lm0000ygenmx3pnnuf"/utf8>>)). slug_test() -> {ok, Channel} = ids@cuid:start(), gleam@should:be_true(check_collision(fun() -> ids@cuid:slug(Channel) end)), gleam@should:be_true(ids@cuid:is_slug(ids@cuid:slug(Channel))). is_slug_test() -> gleam@should:be_false(ids@cuid:is_slug(<<"random"/utf8>>)), gleam@should:be_true(ids@cuid:is_slug(<<"12345678"/utf8>>)). check_collision(Func) -> gleam@pair:second( gleam@iterator:fold( gleam@iterator:unfold(0, fun(Acc) -> case Acc < 100000 of false -> done; true -> {next, Func(), Acc + 1} end end), {gleam@map:new(), true}, fun(Id, Acc@1) -> {IdMap, Flag} = Acc@1, case Flag of false -> Acc@1; true -> case gleam@map:get(IdMap, Id) of {ok, _} -> {IdMap, false}; {error, _} -> {gleam@map:insert(IdMap, Id, Id), true} end end end ) ).