-module(ids@cuid_test). -compile(no_auto_import). -export([gen_test/0, is_cuid_test/0, slug_test/0, is_slug_test/0]). -spec gen_test() -> gleam@should:expectation(). gen_test() -> Channel@1 = case ids@cuid:start() of {ok, Channel} -> Channel; Gleam@Assert -> erlang:error(#{gleam_error => assert, message => <<"Assertion pattern match failed"/utf8>>, value => Gleam@Assert, module => <<"ids/cuid_test"/utf8>>, function => <<"gen_test"/utf8>>, line => 12}) end, gleam@should:be_true(check_collision(fun() -> ids@cuid:gen(Channel@1) end)), gleam@should:be_true( gleam@string:starts_with(ids@cuid:gen(Channel@1), <<"c"/utf8>>) ). -spec is_cuid_test() -> gleam@should:expectation(). is_cuid_test() -> gleam@should:be_false(ids@cuid:is_cuid(<<"random"/utf8>>)), gleam@should:be_true(ids@cuid:is_cuid(<<"ckgr2o7lm0000ygenmx3pnnuf"/utf8>>)). -spec slug_test() -> gleam@should:expectation(). slug_test() -> Channel@1 = case ids@cuid:start() of {ok, Channel} -> Channel; Gleam@Assert -> erlang:error(#{gleam_error => assert, message => <<"Assertion pattern match failed"/utf8>>, value => Gleam@Assert, module => <<"ids/cuid_test"/utf8>>, function => <<"slug_test"/utf8>>, line => 34}) end, gleam@should:be_true(check_collision(fun() -> ids@cuid:slug(Channel@1) end)), gleam@should:be_true(ids@cuid:is_slug(ids@cuid:slug(Channel@1))). -spec is_slug_test() -> gleam@should:expectation(). is_slug_test() -> gleam@should:be_false(ids@cuid:is_slug(<<"random"/utf8>>)), gleam@should:be_true(ids@cuid:is_slug(<<"12345678"/utf8>>)). -spec check_collision(fun(() -> binary())) -> boolean(). 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) -> {Id_map, Flag} = Acc@1, case Flag of false -> Acc@1; true -> case gleam@map:get(Id_map, Id) of {ok, _} -> {Id_map, false}; {error, _} -> {gleam@map:insert(Id_map, Id, Id), true} end end end ) ).