# erlang_test_2023 Реалізувати алгоритм обмеження пропускної здатності каналу в рамках Erlang додатку `token_bucket`. Для збірки та запуску проекта використовувати `erlang.mk`. Додаток повинен використовувати `ETS`. Модуль `token_bucket` повинен експортувати дві функції: `is_limit_reached/1,2`. Плюсом буде покриття коду тестами (з використанням `CT`). **Ціль тестового завдання**: подивитись на стиль та підходи в програмуванні. Ручне тестування функціоналу буде виглядати так: ``` $ cd token_bucket $ make run 1> token_bucket:is_limit_reached(123). false. 2> [token_bucket:is_limit_reached(123) || _ <- lists:seq(1,5)]. [false,false,false,true,true] 3> [token_bucket:is_limit_reached(123, 4) || _ <- lists:seq(1,5)]. [false,false,false,false,true] 4> [token_bucket:is_limit_reached(123, infinity) || _ <- lists:seq(1,5)]. [false,false,false,false,false] ``` Запуск тестів: ``` $ cd token_bucket $ make ct ``` Допишіть логіку в модуль, котрий приведено нижче. Зверніть увагу, що в тестовому завданні немає вимоги реалізувати очистку кеша в ETS. Рішення, реалізовувати очистку кеша, чи ні - залишається за Вами. Однак покриття тестами бажане: чим краще Ви оформите тестове завдання, тим вищою буде оцінка вашого коду. ``` -module(token_bucket). -export([ is_limit_reached/1, is_limit_reached/2 ]). -define(DEFAULT_RPS, 3). -type user_id() :: pos_integer(). -type max_rps() :: pos_integer() | infinity. -spec is_limit_reached(user_id()) -> boolean(). is_limit_reached(UserId) -> is_limit_reached(UserId, ?DEFAULT_RPS). -spec is_limit_reached(user_id(), max_rps()) -> boolean(). is_limit_reached(_UserId, _MaxRps) -> {error, not_implemented}. ... ``` ---- erl 23.3.4.5 ``` e@ee:~/git/erlang_test_2023$ . /home/e/.kerl/erlangs/23.3.4.5/activate e@ee:~/git/erlang_test_2023$ make DEPEND token_bucket.d ERLC token_bucket.erl APP token_bucket.app.src e@ee:~/git/erlang_test_2023$ make run erl -pa ebin +pc unicode -args_file vm.args -config sys.config -eval 'application:start(token_bucket)' Erlang/OTP 23 [erts-11.2.2.4] [source] [64-bit] [smp:20:20] [ds:20:20:10] [async-threads:5] [hipe] Eshell V11.2.2.4 (abort with ^G) (token_bucket@127.0.0.1)1> .. q(). e@ee:~/git/erlang_test_2023$ make ct .. Testing git.erlang_test_2023.limit_reached_SUITE: TEST COMPLETE, 5 ok, 0 failed of 5 test cases ```