This repository has been archived on 2024-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
BMTP/lab10/prj/TestDriver/main.cpp
2023-03-03 22:40:33 +02:00

192 lines
5.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ModulesMykhailenko.h"
#include <iostream>
#include <locale>
#include <fstream>
#include <codecvt>
#include <string>
using namespace std;
string input = "input.txt";
string output = "output.txt";
bool createInput(wstring content) {
wofstream data;
data.open(input);
data.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
if (!data) {
cout << "Помилка запису вхідних даних." << endl;
return false;
}
data << content << endl;
return true;
}
bool test1_1() {
wstring line;
const wstring lines[3] = {L"Розробник: Михайленко Станіслав", L"Установа/організація: Центральноукраїнський національний технічний університет", L"Рік розробки: 2023"};
bool linesFound[3] = {false, false, false};
int currentLine = 0;
if(!createInput(L"тест"))
return false;
t10_1(input, output);
wifstream indata;
indata.open(output);
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
if (line.find(lines[currentLine]) != wstring::npos) {
linesFound[currentLine] = true;
currentLine++;
}
if (linesFound[0] && linesFound[1] && linesFound[2])
return true;
}
return false;
}
bool test1(wstring data, bool wordPresent) {
wstring line;
if(!createInput(data))
return false;
t10_1(input, output);
wifstream indata;
indata.open(output);
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
if ((wordPresent && line.find(L"наявні") != wstring::npos) || (!wordPresent && line.find(L"відсутні") != wstring::npos))
return true;
}
return false;
}
bool test2_1() {
wstring line;
if(!createInput(L"тест"))
return false;
t10_2(input);
wifstream indata;
indata.open(input);
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
if (line.find(L"Дата й час дозапису: ") != wstring::npos)
return true;
}
return false;
}
bool test2(wstring data, int digits) {
wstring line;
if(!createInput(data))
return false;
t10_2(input);
wifstream indata;
indata.open(input);
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
if (line.find(L"Кількість цифр у файлі: " + digits) != wstring::npos)
return true;
}
return false;
}
bool test3(int x, int y, int z, int b, wstring s, wstring bin) {
wstring line;
bool firstValid = false;
t10_3(output, x, y, z, b);
wifstream indata;
indata.open(output);
indata.imbue(locale(locale(), new codecvt_utf8<wchar_t>));
while (getline(indata,line)) {
if (!firstValid && (line.find(L"s = " + s) != wstring::npos))
firstValid = true;
else if (firstValid && (line.find(L"b у двійковому коді: " + bin) != wstring::npos))
return true;
}
return false;
}
int main() {
const wstring data1_1[] = {L"Студент", L"Студентка", L"модуль!", L"модульчик"};
const bool wordPresent[] = {true, false, true, false};
const wstring data2_1[] = {L"Програміст", L"0123456789", L"12", L"00000"};
const int digits[] = {0, 10, 2, 5};
const int x[] = {7, 2, 9, 0, 7};
const int y[] = {2, 45, 0, 0, 5};
const int z[] = {1, 6, 1, 0, 4};
const int b[] = {1, 3, 8, 100, 127};
const wstring s[] = {L"7.84054", L"268.187", L"3.84147", L"1", L"35775.4"};
const wstring bin[] = {L"1", L"11", L"1000", L"1100100", L"1111111"};
setlocale(LC_ALL, "");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
bool value = false;
wstring description;
if (i < 2 && j == 0) {
description = L"виведення повідомлення";
if (i == 0)
value = test1_1();
else if (i == 1)
value = test2_1();
}
else if (i == 0) {
value = test1(data1_1[j-1], wordPresent[j-1]);
description = L"вхідні дані: " + data1_1[j-1] + L", очікуваний результат: слова " + (wordPresent[j-1] ? L"наявні" : L"відсутні");
}
else if (i == 1) {
value = test2(data2_1[j-1], digits[j-1]);
string tmpstr = to_string(digits[j-1]);
wstring wstr(tmpstr.begin(), tmpstr.end());
description = L"вхідні дані: " + data2_1[j-1] + L", очікуваний результат: кількість чисел: " + wstr;
}
else if (i == 2) {
value = test3(x[j], y[j], z[j], b[j], s[j], bin[j]);
string xtmpstr = to_string(digits[j-1]);
wstring xwstr(xtmpstr.begin(), xtmpstr.end());
string ytmpstr = to_string(digits[j-1]);
wstring ywstr(ytmpstr.begin(), ytmpstr.end());
string ztmpstr = to_string(digits[j-1]);
wstring zwstr(ztmpstr.begin(), ztmpstr.end());
string btmpstr = to_string(digits[j-1]);
wstring bwstr(btmpstr.begin(), btmpstr.end());
description = L"вхідні дані: x = " + xwstr + L", y = " + ywstr + L", z = " + zwstr + L", b = " + bwstr + L", очікуваний результат: s = " + s[j] + L", b у двійковому коді: " + bin[j];
}
wcout << "Test " << i + 1 << "." << j + 1 << " (" << description << ") " << (value ? "passed" : "failed") << endl;
}
}
return 0;
}