Current section

Files

Jump to
ids gen test ids@cuid_test.erl
Raw

gen/test/ids@cuid_test.erl

-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
)
).