#!/usr/bin/env bash

if [ -z "$1" ]; then
  echo "Не вказано шлях до Мавки"
  exit 1
fi

MAVKA=$(realpath $1)

cd тестування

TESTS=(
  "тести/_різне/0_визначено_все_що_треба.м" \
  "тести/Дія/0_дія_має_всі_властивості.м" \
  "тести/Дія/1_дія_виконується.м" \
  "тести/Дія/2_дія_перевіряє_типи_аргументів.м" \
  "тести/Структура/0_структура_має_всі_властивості.м" \
  "тести/число/0_число_має_всі_властивості.м" \
  "тести/число/1_число_додавання.м" \
  "тести/число/2_число_віднімання.м" \
  "тести/число/3_число_множення.м" \
  "тести/число/4_число_ділення.м" \
  "тести/число/5_число_неповна_частка.м" \
  "тести/число/6_число_остача.м" \
  "тести/число/7_число_степінь.м" \
  "тести/число/8_число_вліво.м" \
  "тести/число/9_число_вправо.м" \
  "тести/число/10_число_вправо_зі_заповненням.м" \
  "тести/число/11_число_двійкове_і.м" \
  "тести/число/12_число_двійкове_або.м" \
  "тести/число/13_число_двійкове_виключне_або.м" \
  "тести/число/14_число_двійкове_заперечення.м" \
  "тести/число/15_число_більше.м" \
  "тести/число/16_число_менше.м" \
  "тести/число/17_число_рівно.м" \
  "тести/число/18_число_числова_негація.м" \
  "тести/число/19_число_числове.м" \
  "тести/число/20_число_заперечити.м" \
  "тести/число/21_число_збільшити.м" \
  "тести/число/22_число_зменшити.м" \
  "тести/текст/0_текст_має_всі_властивості.м" \
  "тести/текст/1_текст_отримання_елементів.м" \
  "тести/текст/2_текст_перевірка_на_місткість_елементів.м" \
  "тести/текст/3_текст_перебір.м" \
  "тести/текст/4_текст_додавання.м" \
  "тести/логічне/0_логічне_має_всі_властивості.м" \
  "тести/список/0_список_має_всі_властивості.м" \
  "тести/список/1_список_отримання_елементів.м" \
  "тести/список/2_список_зміна_елементів.м" \
  "тести/список/3_список_видалення_елементів.м" \
  "тести/список/4_список_перевірка_на_місткість_елементів.м" \
  "тести/список/5_список_перебір.м" \
  "тести/список/6_список_додати.м" \
  "тести/список/7_список_забрати.м" \
  "тести/список/8_список_фільтрувати.м" \
  "тести/список/9_список_знайти.м" \
  "тести/список/10_список_знайти_позицію.м" \
  "тести/список/11_список_перетворити.м" \
  "тести/список/12_список_обернути.м" \
  "тести/словник/0_словник_має_всі_властивості.м" \
  "тести/словник/1_словник_отримання_елементів.м" \
  "тести/словник/2_словник_зміна_елементів.м" \
  "тести/словник/3_словник_видалення_елементів.м" \
  "тести/словник/4_словник_перевірка_на_місткість_елементів.м" \
  "тести/словник/5_словник_отримання_ключів.м" \
  "тести/словник/6_словник_отримання_значень.м" \
  "тести/Модуль/0_модуль_працює.м" \
  "тести/бібліотека/М/0_біб_М_має_всі_визначення.м" \
  "тести/бібліотека/М/1_біб_М_числові_визначення_вірні.м"
)

SUCCESS_COUNT=0
FAILED_COUNT=0

for test in ${TESTS[@]}; do
  echo -en "$test"
  result=$($MAVKA "$test")
  if [ $? -ne 0 ]; then
    echo -en ":\n\e[31m$result\e[0m\n"
    FAILED_COUNT=$((FAILED_COUNT+1))
  elif [ "$result" == "" ]; then
    echo -en ": \e[32mпройдено\e[0m\n"
    SUCCESS_COUNT=$((SUCCESS_COUNT+1))
  else
    echo -en ":\n\e[31m$result\e[0m\n"
    FAILED_COUNT=$((FAILED_COUNT+1))
  fi
done

echo -e "---"
if [ $SUCCESS_COUNT -eq 0 ]; then
  echo -e "Пройдено: $SUCCESS_COUNT"
else
  echo -e "Пройдено: \e[32m$SUCCESS_COUNT\e[0m"
fi
if [ $FAILED_COUNT -eq 0 ]; then
  echo -e "Провалено: \e[32m$FAILED_COUNT\e[0m"
else
  echo -e "Провалено: \e[31m$FAILED_COUNT\e[0m"
fi

cd - >/dev/null