#include "test_I.h"

int test_I_mul (int iterations)
{
	int error = 0;
	int i;
	// Check commutativity.
	for (i = iterations; i > 0; i--) {
		cl_I a = testrandom_I();
		cl_I b = testrandom_I();
		ASSERT2(a*b == b*a, a,b);
	}
	// Check associativity.
	for (i = iterations; i > 0; i--) {
		cl_I a = testrandom_I();
		cl_I b = testrandom_I();
		cl_I c = testrandom_I();
		ASSERT3((a*b)*c == a*(b*c), a,b,c);
	}
	// Check second binomial formula.
	for (i = iterations; i > 0; i--) {
		cl_I a = testrandom_I();
		cl_I b = testrandom_I();
		ASSERT2((a+b)*(a-b) == a*a-b*b, a,b);
	}
	// Check distributive formula.
	for (i = iterations; i > 0; i--) {
		cl_I a = testrandom_I();
		cl_I b = testrandom_I();
		cl_I c = testrandom_I();
		ASSERT3((a+c)*(b+c) == a*b+(a+b)*c+c*c, a,b,c);
	}
	// Check special cases 0, 1, -1.
	for (i = iterations; i > 0; i--) {
		cl_I a = testrandom_I();
		ASSERT1(a*0 == 0, a);
		ASSERT1(a*1 == a, a);
		ASSERT1(a*-1 == -a, a);
	}
	return error;
}