/Nokia_TestTask

Тестовое задание от компании Nokia

Primary LanguageC++The UnlicenseUnlicense

Задание:

Задан CSV-файл с заголовком, в котором перечислены названия столбцов. Строки нумеруются целыми положительными числами, необязательно в порядке возрастания. В ячейках CSV-файла могут хранится или целые числа или выражения вида = ARG1 OP ARG2, где ARG1 и ARG2 - целые числа или адреса ячеек в формате Имя_колонки Номер_строки, а OP - арифметическая операция из списка +, -, *, /.

Например, таблица

A B Cell
1 1 0 -1
2 2 =A1+Cell30
30 0 =B1+A1 5

Будет представлена в CSV-формате следующим образом:

,A,B,Cell
1,1,0,-1
2,2,=A1+Cell30,
30,0,=B1+A1,5

Требуется написать программу, которая читает произвольную CSV-форму из файла (количество строк и столбцов может быть любым), вычисляет значение ячеек, если это необходимо, и выводит получившуюся табличку в виде CSV-представления в консоль.

Сборка и запуск основной программы (Windows):

build.sh

cd build

Nokia_TestCSV.exe ../resource/nokia_test.csv

Сборка и запуск тестов (Windows):

cd test

build.sh

cd build

Nokia_TestCSV_Test.exe

Сборка и запуск основной программы (Linux):

./build.sh

cd build/

./Nokia_TestCSV ../resource/nokia_test.csv

Сборка и запуск тестов (Linux):

cd test/

./build.sh

cd build/

./Nokia_TestCSV_Test

Тестовые примеры вместе с файлами находятся в test/src/test_cases и test/resource/* соответственно. Ниже представлены следующие тестовые сценарии для проверки работы программы:

  • пустота ячеек
  • пустота первой ячейки
  • одинаковые название заголовков столбцов/строк
  • положительное число в заголовках строк
  • деление на 0
  • соответствие содержимого ячейки шаблону =ARG1 OP ARG2 или число
  • использование целых чисел
  • ссылки только на существующие ячейки
  • рекурсивное вычисление значений ячеек и проверка на бесконечную рекурсию (когда в вычислениях используется ячейка, которая ещё не была вычислена, и она начинает вычисляться заново по кругу)
  • правильное вычисление ячеек
  • правильный вывод таблицы