Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ath31st/s21_decimal_starter

This starter includes basic arithmetic functions, test generator and s21_decimal values generator for a smooth start of a learning project.
https://github.com/ath31st/s21_decimal_starter

java maven s21-decimal

Last synced: 1 day ago
JSON representation

This starter includes basic arithmetic functions, test generator and s21_decimal values generator for a smooth start of a learning project.

Awesome Lists containing this project

README

        

# s21_decimal starter

![Java](https://img.shields.io/badge/Java-ED8B00?style=for-the-badge&logo=openjdk&logoColor=white)
![SonarLint](https://img.shields.io/badge/SonarLint-CB2029?style=for-the-badge&logo=sonarlint&logoColor=white)
![Apache Maven](https://img.shields.io/badge/Apache%20Maven-C71A36?style=for-the-badge&logo=Apache%20Maven&logoColor=white)

## Версия Программы

Текущая версия программы: 0.9.1

## Предисловие

Наверное, каждому знакома ситуация, когда стартуешь проект s21_decimal, читаешь задание, смотришь
лекции на ютубе, пир-ту-пиришься с командой, и вот, обязанности, объем работ распределен между
участниками, осталось только "Вошли и вышли, приключение на 20 минут". И, почти сразу, сталкиваешься
с проблемой - под рукой нет значений-заготовок для написания первых частей функций. Онлайн
конвертеры помогают лишь частино, да еще и отнимают много времени...

Данный стартер предназначен для того, чтобы облегчить тяжелый вход в нелегкий проект s21_decimal.
Пользуйтесь!

PS. Но помните, пользуясь данным стартером, вы прославляете:

Нажмите, чтобы открыть спойлер

![image info](images/hb.png)

## Оглавление

1. [Версия Программы](#версия-программы)
2. [Предисловие](#предисловие)
3. [Список возможностей (меню)](#список-возможностей-меню)
4. [Пример работы](#пример-работы)
5. [Как запустить](#как-запустить)
6. [Пояснения к генератору тестов](#пояснения-к-генератору-тестов)
7. [Рекомендации по использованию тестов в проекте](#рекомендации-по-использованию-тестов-в-проекте)
8. [В планах](#в-планах)
9. [Список зависимостей (технологий и библиотек)](#список-зависимостей-технологий-и-библиотек)
10. [Лицензия](#лицензия)

## Список возможностей (меню)

1. Сложение - сложение двух десятичных чисел
2. Вычитание - вычитание двух десятичных чисел
3. Умножение - умножение двух десятичных чисел
4. Деление - деление двух десятичных чисел
5. Из десятичного в s21_decimal - перевод из десятичного вида в s21_decimal тип
6. Из s21_decimal в десятичное число - перевод из строкового s21_decimal в десятичное число
7. Генератор случайных s21_decimal - генерация выбранного количества s21_decimal значений
8. Генератор unit-тестов - генерация выбранного количества unit-тестов для выбранной функции
1. s21_add
2. s21_sub
3. s21_mul
4. s21_div
5. Все функции сразу в один файл
9. Удаление папки и файлов с unit-тестами" - удаление сгенерированных файлов и папки, в которой они находились
0. Выход - заверщение работы программы.

## Пример работы

Нажмите, чтобы открыть спойлер

![image info](images/example.gif)

## Как запустить

Вы можете скачать собранный бинарный
файл [здесь](https://github.com/ath31st/s21_decimal_starter/releases).
Для запуска необходима Java не ниже 11 версии и команда ```java -jar s21_decimal_starter*.jar``` в
папке с файлом. В наличии небольшая пасхалка, активируется ключом -hb (полная
команда ```java -jar s21_decimal_starter*.jar -hb```)

Так же, вы можете собрать бинарный файл самостоятельно.
На linux вам понадобится Java не ниже 11 версии и вот эти команды:

```bash
git clone https://github.com/ath31st/s21_decimal_starter
cd s21_decimal_starter
mvn clean package
cp target/*-jar-with-dependencies.jar s21_decimal_starter-$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec).jar
java -jar s21_decimal_starter*.jar
```

## Пояснения к генератору тестов

Важное уточнение - данный генератор рассчитан на работу только с
библиотекой [check.h](https://github.com/libcheck/check).
Генерировать тесты можно по каждой функции отдельно, так и по всем сразу, в единый файл. Генерация
тестов работает по следующему принципу - первые 16 тестов направлены на проверку
корректности входных значений, подаваемых в аргументы основных функций. Затем идут тесты (указанного
количества), которые должны успешно проходить. После них, в объеме 33% от указанного количества,
создаются тесты, результаты которых превышают допустимые значения s21_decimal (как очень большие,
так и очень малые величины). Сгенерированные тесты выводятся в консоль (за исключением общей
генерации) и сохраняются в файлы с расширением .c (для вашего удобства). Адрес сохранения файлов
указывается в консоли, после завершения генерации. Данные файлы вы можете переносить в собственные
проекты, но не забудьте добавить в них #include с вашим заголовочным файлом, а так же, прописать
функцию с возвращаемым типом данных Suite в исполняемый файл, который будет запускать тесты (там где
у вас функция main).

#### Рекомендации по использованию тестов в проекте

Во время использования данного стартера в первую очередь опирайтесь на здравый смысл и собственнные
ощущения. Этот стартер был протестирован на нескольких, успешно сданных, проектах и нигде тесты не
прошли на 100% (результаты были около 90%). Если у вас что-то не проходит, то посмотрите внимательно
на значения используемые в тесте, возможно, там получается что-то сложное, где надо сначала
поднимать степень одного из значений, а потом еще и снижать степень второго, чтобы уровнять их и при
этом не выйти за пределы s21_decimal. Такой тест вы можете проигнорировать и удалить его, нет смысла
тратить десятки часов на идеальный результат. Тем более, у вертера нет таких сложных кейсов.
Общие рекомендации такие - первые 16 тестов (проверка корректности используемых входных значений)
должны проходить 100%, в остальном ориентируйтесь на 80%+.

## В планах

- ~~Глобальный рефакторинг~~ (выполнено 09.05.2024)
- ~~Улучшение читаемости консольного интерфейса~~
- ~~Генерация фейл-тестов (слишком большой/слишком малый результат)~~ (добавлено в 0.8.11
31.01.2024)
- ~~Вывод сгенерированных тестов в файл~~ (добавлено в 0.8.0 27.01.2024)
- ~~Покрытие проекта тестами (81%)~~ (добавлено в 0.9.1 25.04.2024)
- ~~Покрытие проекта JavaDocs~~ (добавлено в 0.8.15 15.02.2024)
- ~~Оптимизация генерации тестовых кейсов~~ (добавлено в 0.8.13 04.02.2024)
- ~~Обратная конверсия из s21_decimal в десятичное число~~ (добавлено в 0.9.0 25.02.2024)

## Список зависимостей (технологий и библиотек)

1. Java: 11
2. Maven: 3.6.0
3. Apache Commons Lang 3: 3.14.0
4. Junit: 5.10.2
5. Mockito: 5.11.0
6. Log4j2: 2.23.1
7. Jacoco: 0.8.11

## Лицензия

Проект лицензирован по Apache 2.0 - см. [LICENSE](https://www.apache.org/licenses/LICENSE-2.0)