<commit_before>#include "defines.h"

// Тестирование

// Функция, вызываемая при ошибке
void print_error(const char *error, const char *file, int line)
{
	printf("Error: %s\nFile: \"%s\"\nLine: %d\n\n", error, file, line);
	fflush(stdout);
#ifdef _WIN32
	printf("\nPress <Enter> to exit...\n");
	fflush(stdout);
	getchar();
#endif
	exit(1);
}

// Функция проверки на выход из допустимого диапазона значений
// во всех точках расчетной области процессора

void test_correct_P_S()
{
	for (int i = 0; i < (def.locNx); i++)
		for (int j = 0; j < (def.locNy); j++)
			for (int k = 0; k < (def.locNz); k++)
			{
				;// TODO: test values
			}
}

// Тест на NaN
// Синтаксис вызова test_nan(x, __FILE__, __LINE__);
void test_nan(double x, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(x))
	{
		printf("Error: NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	// Тестовое более жесткое ограничение именно для этой задачи
	/*if (x > 1e30 || x < -1e30)
	{
		printf("Error: NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}*/
	
#endif
}

// Тест на положительное и не NaN
// Синтаксис вызова test_positive(x, __FILE__, __LINE__);
void test_positive(double x, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(x))
	{
		printf("Error: NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (x < 0)
	{
		printf("Error: x<0\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
#endif
}

// Тест на вхождение насыщенностей в [0;1]
// Синтаксис вызова test_S(x, __FILE__, __LINE__);
void test_S(double S, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(S))
	{
		printf("Error: S=NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (S < 0)
	{
		printf("Error: S<0\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (S > 1)
	{
		printf("Error: S>1\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
#endif
}

// Тест на вхождение скоростей в [-100;100]
// Синтаксис вызова test_u(x, __FILE__, __LINE__);
void test_u(double u, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(u))
	{
		printf("Error: u=NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (u < -1e8)
	{
		printf("Error: u<-100\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (u > 1e8)
	{
		printf("Error: u>100\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
#endif
}


// Тест на вхождение плотностей в [-0;1500]
// Синтаксис вызова test_ro(x, __FILE__, __LINE__);
void test_ro(double ro, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(ro))
	{
		printf("Error: ro = NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (ro < 0)
	{
		printf("Error: ro < 0\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
	if (ro > 1e8)
	{
		printf("Error: ro > 1500\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}
#endif
}

// Функция проверяет, что первый аргумент много больше (по модулю) второго
// Если это не так, печатается предупреждение
void test_arrowhead(double big, double small, const char *file, int line)
{
#ifdef MY_TEST_1
	if (fabs(big / 30) < fabs(small))<commit_msg>[IMPROVE] error printing for debugging<commit_after>#include "defines.h"

// Тестирование

// Функция, вызываемая при ошибке
void print_error(const char *error, const char *file, int line)
{
	printf("Error: %s\nFile: \"%s\"\nLine: %d\n\n", error, file, line);
	fflush(stdout);
#ifdef _WIN32
	printf("\nPress <Enter> to exit...\n");
	fflush(stdout);
	getchar();
#endif
	exit(1);
}

// Функция проверки на выход из допустимого диапазона значений
// во всех точках расчетной области процессора

void test_correct_P_S()
{
	for (int i = 0; i < (def.locNx); i++)
		for (int j = 0; j < (def.locNy); j++)
			for (int k = 0; k < (def.locNz); k++)
			{
				;// TODO: test values
			}
}

// Тест на NaN
// Синтаксис вызова test_nan(x, __FILE__, __LINE__);
void test_nan(double x, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(x))
	{
		print_error("NaN", file, line);
	}
	// Тестовое более жесткое ограничение именно для этой задачи
	/*if (x > 1e30 || x < -1e30)
	{
		printf("Error: NaN\nFile:\"%s\"\nLine:\"%d\"\n\n", file, line);
	}*/
	
#endif
}

// Тест на положительное и не NaN
// Синтаксис вызова test_positive(x, __FILE__, __LINE__);
void test_positive(double x, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(x))
	{
		print_error("NaN", file, line);
	}
	if (x < 0)
	{
		print_error("x<0", file, line);
	}
#endif
}

// Тест на вхождение насыщенностей в [0;1]
// Синтаксис вызова test_S(x, __FILE__, __LINE__);
void test_S(double S, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(S))
	{
		print_error("NaN", file, line);
	}
	if (S < 0)
	{
		print_error("S<0", file, line);
	}
	if (S > 1)
	{
		print_error("S>1", file, line);
	}
#endif
}

// Тест на вхождение скоростей в [-100;100]
// Синтаксис вызова test_u(x, __FILE__, __LINE__);
void test_u(double u, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(u))
	{
		print_error("NaN", file, line);
	}
	if (u < -1e8)
	{
		print_error("u < -1e8", file, line);
	}
	if (u > 1e8)
	{
		print_error("u > 1e8", file, line);
	}
#endif
}


// Тест на вхождение плотностей в [-0;1500]
// Синтаксис вызова test_ro(x, __FILE__, __LINE__);
void test_ro(double ro, const char *file, int line)
{
#ifdef MY_TEST
	if (isnan(ro))
	{
		print_error("NaN", file, line);
	}
	if (ro < 0)
	{
		print_error("ro < 0", file, line);
	}
	if (ro > 1e8)
	{
		print_error("ro > 1e8", file, line);
	}
#endif
}

// Функция проверяет, что первый аргумент много больше (по модулю) второго
// Если это не так, печатается предупреждение
void test_arrowhead(double big, double small, const char *file, int line)
{
#ifdef MY_TEST_1
	if (fabs(big / 30) < fabs(small))
{'fraction_non_alphanumeric': 0.1945392491467577, 'fraction_numerical': 0.017962996227770794, 'mean_word_length': 3.582716049382716, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3047863', 'n_tokens_mistral': 2637, 'n_tokens_neox': 2628, 'n_words': 616}