|
|
@@ -0,0 +1,56 @@
|
|
|
+# Реализация тестов для прошлых чемпионатов (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,<br/> int materialType,<br/>int count,<br/>float width,<br/>float length
|
|
|
+Возвращаемые параметры | int
|
|
|
+
|
|
|
+## Разработка модульных тестов (Unit-tests)
|
|
|
+
|
|
|
+Для выполнения процедуры тестирования созданного вами метода библиотеки **WSUniversalLib**, возвращающего целое количество сырья для производства, вам необходимо создать отдельный проект модульных тестов.
|
|
|
+
|
|
|
+В рамках проекта разработайте тесты, максимально полно покрывающие функционал метода.
|
|
|
+
|
|
|
+Обратите внимание, что имена тестов должны отражать их суть, т.е. вместо `TestMethod1()` тест следует назвать, например, `GetQuantityForProduct_NonExistentProductType()` для тестирования случая передачи несуществующего типа продукции.
|
|
|
+
|
|
|
+Необходимо разработать модульные тесты, которые на основании исходных данных можно условно разделить на 2 группы следующим образом: 10 методов низкой сложности и 5 методов высокой сложности.
|