
#include "ComplexNumbers.hpp"
#include "Testing.hpp"

using namespace tp;

TEST_DEF(ComplexNumber) {
	TEST((ComplexCart{ 3, 4 }.mod() == 5));
	TEST((abs(ComplexCart{ 1, 1 }.arg() - 0.7853981633974483) < 0.001));
	TEST((ComplexCart{ 3, 4 }.norm2() == 25));

	{
		ComplexCart cn{ 3, 4 };
		ComplexCart expected{ 0.12, -0.16 };
		auto val = cn.reciprocal();
		TEST((val == expected));
	}

	{
		ComplexCart cn{ 3, 4 };
		ComplexCart expected{ 3, -4 };
		TEST((cn.conjugate() == expected));
	}

	{
		ComplexCart cn1{ 3, 4 };
		ComplexCart cn2{ 1, 2 };
		ComplexCart expected{ -5, 10 };
		TEST((cn1 * cn2 == expected));
	}

	{
		ComplexRad c1{ 5, 7 };
		ComplexRad c2{ 10, 3 };
		ComplexCart tmp1 = (c1 * c2).cart();
		ComplexCart tmp2 = (c1.cart() * c2.cart());
		TEST((tmp1 - tmp2).mod() < 0.001);
	}
}

TEST_DEF(Math) { testComplexNumber(); }
