# Реализация тестов для прошлых чемпионатов (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 методов высокой сложности.