185 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "Test.hpp"
 | |
| 
 | |
| int test(std::ostream &outStream)
 | |
| {
 | |
| 	int failed = 0;
 | |
| 
 | |
| 	/*************************************************************************
 | |
| 	 * HAPPY PATH TESTS
 | |
| 	 *************************************************************************/
 | |
| 
 | |
| 	auto r1 = xg::newGuid();
 | |
| 	auto r2 = xg::newGuid();
 | |
| 	auto r3 = xg::newGuid();
 | |
| 
 | |
| 	outStream << r1 << std::endl << r2 << std::endl << r3 << std::endl;
 | |
| 
 | |
| 	xg::Guid s1("7bcd757f-5b10-4f9b-af69-1a1f226f3b3e");
 | |
| 	xg::Guid s2("16d1bd03-09a5-47d3-944b-5e326fd52d27");
 | |
| 	xg::Guid s3("fdaba646-e07e-49de-9529-4499a5580c75");
 | |
| 	xg::Guid s4("7bcd757f-5b10-4f9b-af69-1a1f226f3b3e");
 | |
| 	xg::Guid s5("7bcd757f-5b10-4f9b-af69-1a1f226f3b31");
 | |
| 
 | |
| 	if (r1 == r2 || r1 == r3 || r2 == r3)
 | |
| 	{
 | |
| 		outStream << "FAIL - not all random guids are different" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if (s1 == s2)
 | |
| 	{
 | |
| 		outStream << "FAIL - s1 and s2 should be different" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if (s1 != s4)
 | |
| 	{
 | |
| 		outStream << "FAIL - s1 and s4 should be equal" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if (s4 < s5) {
 | |
| 		outStream << "FAIL - s5 should should less than s4" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	std::stringstream ss1;
 | |
| 	ss1 << s1;
 | |
| 	if (ss1.str() != "7bcd757f-5b10-4f9b-af69-1a1f226f3b3e")
 | |
| 	{
 | |
| 		outStream << "FAIL - string from s1 stream is wrong" << std::endl;
 | |
| 		outStream << "--> " << ss1.str() << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if (s1.str() != "7bcd757f-5b10-4f9b-af69-1a1f226f3b3e")
 | |
| 	{
 | |
| 		outStream << "FAIL - string from s1.str() is wrong" << std::endl;
 | |
| 		outStream << "--> " << s1.str() << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	std::stringstream ss2;
 | |
| 	ss2 << s2;
 | |
| 	if (ss2.str() != "16d1bd03-09a5-47d3-944b-5e326fd52d27")
 | |
| 	{
 | |
| 		outStream << "FAIL - string generated from s2 is wrong" << std::endl;
 | |
| 		outStream << "--> " << ss2.str() << std::endl;
 | |
| 		return 1;
 | |
| 	}
 | |
| 
 | |
| 	std::stringstream ss3;
 | |
| 	ss3 << s3;
 | |
| 	if (ss3.str() != "fdaba646-e07e-49de-9529-4499a5580c75")
 | |
| 	{
 | |
| 		outStream << "FAIL - string generated from s3 is wrong" << std::endl;
 | |
| 		outStream << "--> " << ss3.str() << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	auto swap1 = xg::newGuid();
 | |
| 	auto swap2 = xg::newGuid();
 | |
| 	auto swap3 = swap1;
 | |
| 	auto swap4 = swap2;
 | |
| 
 | |
| 	if (swap1 != swap3 || swap2 != swap4 || swap1 == swap2)
 | |
| 	{
 | |
| 		outStream << "FAIL - swap guids have bad initial state" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	swap1.swap(swap2);
 | |
| 
 | |
| 	if (swap1 != swap4 || swap2 != swap3 || swap1 == swap2)
 | |
| 	{
 | |
| 		outStream << "FAIL - swap didn't swap" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	{
 | |
| 		std::unordered_map<xg::Guid, int> m = {{s1, 1}, {s2, 2}};
 | |
| 		auto it1 = m.find(s1);
 | |
| 		auto it2 = m.find(s2);
 | |
| 		if(!( it1 !=  m.end() && it1->first == s1 && it1->second == 1 && it2 !=  m.end() && it2->first == s2 && it2->second == 2))
 | |
| 		{
 | |
| 			outStream << "FAIL - map/hash failed!" << std::endl;
 | |
| 			failed++;
 | |
| 		}
 | |
| 		auto it3 = m.find(s3);
 | |
| 		if(it3 != m.end())
 | |
| 		{
 | |
| 			outStream << "FAIL - map/hash failed!" << std::endl;
 | |
| 			failed++;
 | |
| 		}
 | |
| 	}
 | |
| 	std::array<unsigned char, 16> bytes =
 | |
| 	{{
 | |
| 		0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
 | |
| 		0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0xdd
 | |
| 	}};
 | |
| 	xg::Guid guidFromBytes(bytes);
 | |
| 	xg::Guid guidFromString("0102030405060708090a0b0c0d0e0fdd");
 | |
| 	if (guidFromBytes != guidFromString)
 | |
| 	{
 | |
| 		outStream << "FAIL - String/bytes make different guids" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if(!std::equal(guidFromBytes.bytes().begin(), guidFromBytes.bytes().end(), bytes.begin()))
 | |
| 	{
 | |
| 		outStream << "FAIL - array returned from bytes() is wrong" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	/*************************************************************************
 | |
| 	* ERROR HANDLING
 | |
| 	*************************************************************************/
 | |
| 
 | |
| 	xg::Guid empty;
 | |
| 	xg::Guid twoTooFew("7bcd757f-5b10-4f9b-af69-1a1f226f3b");
 | |
| 	if (twoTooFew != empty || twoTooFew.isValid())
 | |
| 	{
 | |
| 		outStream << "FAIL - Guid from two too few chars" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	xg::Guid oneTooFew("16d1bd03-09a5-47d3-944b-5e326fd52d2");
 | |
| 	if (oneTooFew != empty || oneTooFew.isValid())
 | |
| 	{
 | |
| 		outStream << "FAIL - Guid from one too few chars" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	xg::Guid twoTooMany("7bcd757f-5b10-4f9b-af69-1a1f226f3beeff");
 | |
| 	if (twoTooMany != empty || twoTooMany.isValid())
 | |
| 	{
 | |
| 		outStream << "FAIL - Guid from two too many chars" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	xg::Guid oneTooMany("16d1bd03-09a5-47d3-944b-5e326fd52d27a");
 | |
| 	if (oneTooMany != empty || oneTooMany.isValid())
 | |
| 	{
 | |
| 		outStream << "FAIL - Guid from one too many chars" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	xg::Guid badString("!!bad-guid-string!!");
 | |
| 	if (badString != empty || badString.isValid())
 | |
| 	{
 | |
| 		outStream << "FAIL - Guid from bad string" << std::endl;
 | |
| 		failed++;
 | |
| 	}
 | |
| 
 | |
| 	if (failed == 0)
 | |
| 	{
 | |
| 		outStream << "All tests passed!" << std::endl;
 | |
| 		return 0;
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		outStream << failed << " tests failed." << std::endl;
 | |
| 		return 1;
 | |
| 	}
 | |
| }
 |