221V 2 years ago
parent
commit
f274a4a61a
1 changed files with 58 additions and 0 deletions
  1. 58 0
      README.md

+ 58 - 0
README.md

@@ -1,2 +1,60 @@
 # 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}.
+...
+```
+----
+
+