TEST(AVG, cant_proc_matrix_when_one_or_more_arguments_are_incorrect) {
	unsigned char* incorrectData = NULL;
	MatrixProcessor proc;
	ASSERT_ANY_THROW(proc.doAveragingOfElements(incorrectData, 1, 1, 1));

	unsigned char* correctData = new unsigned char[4];
	correctData[0] = 37;
	correctData[1] = 158;
	correctData[2] = 0;
	correctData[3] = 41;
	ASSERT_ANY_THROW(proc.doAveragingOfElements(correctData, 1, 1, -1));
	ASSERT_ANY_THROW(proc.doAveragingOfElements(correctData, -1, 1, 40));
	ASSERT_ANY_THROW(proc.doAveragingOfElements(correctData, 1, -1, 40));
	delete[]correctData;
}
TEST(AVG, can_process_matrix){
	unsigned char a[20], exp[20];
//	23	17	182	1
//	57	255	3	0
//	7	11	1	1
//	180	200	1	100
//	13	25	101	50

	a[0] = 23;		a[1] = 17;		a[2] = 182;		a[3] = 1;
	a[4] = 57;		a[5] = 255;		a[6] = 3;		a[7] = 0;
	a[8] = 7;		a[9] = 11;		a[10] = 1;		a[11] = 1;
	a[12] = 180;	a[13] = 200;	a[14] = 1;		a[15] = 100;
	a[16] = 13;		a[17] = 25;		a[18] = 101;	a[19] = 50;
	size_t cov = 1;
	MatrixProcessor proc;
	ASSERT_NO_THROW(proc.doAveragingOfElements(a, 4, 5, cov));
	exp[0] = 88;	exp[1] = 89;	exp[2] = 76;	exp[3] = 46;
	exp[4] = 61;	exp[5] = 61;	exp[6] = 52;	exp[7] = 31;
	exp[8] = 118;	exp[9] = 79;	exp[10] = 63;	exp[11] = 17;
	exp[12] = 72;	exp[13] = 59;	exp[14] = 54;	exp[15] = 42;
	exp[16] = 104;	exp[17] = 86;	exp[18] = 79;	exp[19] = 63;
	for (size_t i = 0; i < 20; i++){
		EXPECT_EQ(exp[i], a[i]);
	}
}
TEST(AVG, dont_change_monotone_matrix){
	unsigned char a[20];
	for (size_t i = 0; i < 20; i++){
		a[i] = 100;
	}
	MatrixProcessor proc;
	ASSERT_NO_THROW(proc.doAveragingOfElements(a, 4, 5, 2));

	for (size_t i = 0; i < 20; i++){
		EXPECT_EQ(100, a[i]);
	}
}
TEST(AVG, works_when_cov_is_too_large)
{
	unsigned char a[20];
//	23	17	182	1
//	57	255	3	0
//	7	11	1	1
//	180	200	1	100
//	13	25	101	50

	a[0] = 23;		a[1] = 17;		a[2] = 182;		a[3] = 1;
	a[4] = 57;		a[5] = 255;		a[6] = 3;		a[7] = 0;
	a[8] = 7;		a[9] = 11;		a[10] = 1;		a[11] = 1;
	a[12] = 180;	a[13] = 200;	a[14] = 1;		a[15] = 100;
	a[16] = 13;		a[17] = 25;		a[18] = 101;	a[19] = 50;
	MatrixProcessor proc;
	ASSERT_NO_THROW(proc.doAveragingOfElements(a, 4, 5, 50));
	for (size_t i = 0; i < 20; i++){
		EXPECT_EQ(61, a[i]);
	}
}