# Реализация тестов для прошлых чемпионатов (DE21)
## Разработка библиотеки классов
### Общие требования
Для того чтобы в производстве могли быстро и одинаково рассчитывать количество необходимого сырья для производства той или иной продукции, необходимо разработать библиотеку классов.
Данная библиотека будет подключаться к основному проекту и должна быть представлена в виде `.dll`.
Чтобы система правильно интегрировалась вам необходимо обязательно следовать правилам именования библиотек, классов и методов в них. В случае ошибок в рамках именования ваша работа не может быть проверена и ваш результат не будет зачтен. Классы и методы должны содержать модификатор **public** (если это реализуемо в рамках платформы), чтобы внешние приложения могли получить к ним доступ.
В качестве названия для библиотеки необходимо использовать: **WSUniversalLib**. Вам необходимо загрузить исходный код проекта с библиотекой в отдельный репозиторий с названием, совпадающим с названием проекта.
### Класс расчета материалов
Метод должен рассчитывать целое количество сырья, необходимого для производства определенного количества (*count*) продукции, учитывая возможный брак материалов. Для упрощения расчетов будем считать всю продукцию прямоугольного размера с известными значениями ширины (*width*) и длины (*length*).
Количество необходимого качественного сырья на одну единицу продукции рассчитывается как площадь продукции, умноженная на коэффициент типа продукции.
Коэффициенты типа продукции (*product_type*):
* Тип продукции 1 - `1.1`,
* Тип продукции 2 - `2.5`,
* Тип продукции 3 - `8.43`.
При этом нужно учитывать процент брака материала в зависимости от его типа (*material_type*):
* Тип материала 1 - `0.3%`,
* Тип материала 2 - `0.12%`.
При этом если в качестве параметров метода будут приходить несуществующие типы продукции/материалов или другие неподходящие данные, то метод должен вернуть `-1`.
Например, необходимо изготовить 15 единиц продукции 3 типа шириной 20 и длиной 45 из материала 1 типа. Количество качественного сырья (без учета брака) будет равно `113 805`. Однако с учетом возможного брака материалов общее необходимое количество сырья должно быть увеличено до `114 147,442`. Округлив полученное значение до ближайшего большего целого, получим `114 148` единиц необходимого сырья.
### Спецификация метода
Метод должен принимать идентификатор типа продукции, идентификатор типа материала, количество необходимой продукции для производства, ширину продукции и длину продукции, а возвращать целое число – количество необходимого сырья с учетом возможного брака сырья.
Библиотека классов | WSUniversalLib.dll
-------------------|------------------
Название класса | Calculation
Название метода | GetQuantityForProduct()
Входящие обязательные параметры | int productType,
int materialType,
int count,
float width,
float length
Возвращаемые параметры | int
## Разработка модульных тестов (Unit-tests)
Для выполнения процедуры тестирования созданного вами метода библиотеки **WSUniversalLib**, возвращающего целое количество сырья для производства, вам необходимо создать отдельный проект модульных тестов.
В рамках проекта разработайте тесты, максимально полно покрывающие функционал метода.
Обратите внимание, что имена тестов должны отражать их суть, т.е. вместо `TestMethod1()` тест следует назвать, например, `GetQuantityForProduct_NonExistentProductType()` для тестирования случая передачи несуществующего типа продукции.
Необходимо разработать модульные тесты, которые на основании исходных данных можно условно разделить на 2 группы следующим образом: 10 методов низкой сложности и 5 методов высокой сложности.