No Description

221V 5059588e61 tests 2 years ago
src fd8a4d826c clean ets cache 2 years ago
test 5059588e61 tests 2 years ago
.gitignore 94ba17234a upd .gitignore 2 years ago
Makefile 5059588e61 tests 2 years ago
README.md 5059588e61 tests 2 years ago
erlang.mk 36010426d4 app init 2 years ago
sys.config a17ddf82be token_bucket 2 years ago
vm.args a17ddf82be token_bucket 2 years ago

README.md

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