TEST(Median, cant_proc_matrix_when_one_or_more_arguments_are_incorrect) {
	unsigned char* incorrectData = NULL;
	MatrixProcessor proc;
	ASSERT_ANY_THROW(proc.doMedialProcessing(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.doMedialProcessing(correctData, 1, 1, -1));
	ASSERT_ANY_THROW(proc.doMedialProcessing(correctData, -1, 1, 40));
	ASSERT_ANY_THROW(proc.doMedialProcessing(correctData, 1, -1, 40));
	delete[]correctData;
}
TEST(Median, 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.doMedialProcessing(a, 4, 5, cov));
	exp[0] = 57;	exp[1] = 57;	exp[2] = 17;	exp[3] = 3;
	exp[4] = 23;	exp[5] = 17;	exp[6] = 3; 	exp[7] = 1;
	exp[8] = 180;	exp[9] = 11;	exp[10] = 3;	exp[11] = 1;
	exp[12] = 25;	exp[13] = 13;	exp[14] = 25;	exp[15] = 50;
	exp[16] = 180;	exp[17] = 101;	exp[18] = 100;	exp[19] = 100;
	for (size_t i = 0; i < 20; i++) {
		EXPECT_EQ(exp[i], a[i]);
	}
}
TEST(Median, 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.doMedialProcessing(a, 4, 5, 2));

	for (size_t i = 0; i < 20; i++) {
		EXPECT_EQ(100, a[i]);
	}
}
TEST(Median, 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.doMedialProcessing(a, 4, 5, 50));
	for (size_t i = 0; i < 20; i++) {
		EXPECT_EQ(23, a[i]);
	}
}