#include "../collections/BitVector.hpp"
#include <stdio.h>

bool test_bitvector()
{
	bool success = true;

	sprawl::collections::BitSet<16> bs;

	bs.Set(0);
	bs.Set(2);
	bs.Set(4);
	bs.Set(6);
	bs.Set(8);
	bs.Set(10);
	bs.Set(12);
	bs.Set(14);

	if(!bs.HasBit(0))
	{
		printf("Check 0 failed\n...");
		success = false;
	}

	if(bs.Count() != 8)
	{
		printf("Count failed\n...");
		success = false;
	}

	bs.Flip(5);

	if(!bs.HasBit(5))
	{
		printf("Flip 5 failed\n...");
		success = false;
	}

	bs.Unset(5);

	if(bs.HasBit(5))
	{
		printf("Unset 5 failed\n...");
		success = false;
	}

	sprawl::String str = bs.ToString();
	if(str != "0101010101010101")
	{
		printf("String failed: %s != 0101010101010101\n...", str.c_str());
	}

	if(bs.None())
	{
		printf("None failed\n...");
		success = false;
	}

	if(bs.All())
	{
		printf("All failed\n...");
		success = false;
	}

	if(!bs.Any())
	{
		printf("Any failed\n...");
		success = false;
	}

	bs.Reset();

	if(!bs.None())
	{
		printf("None 2 failed\n...");
		success = false;
	}

	if(bs.All())
	{
		printf("All 2 failed\n...");
		success = false;
	}

	if(bs.Any())
	{
		printf("Any 2 failed\n...");
		success = false;
	}

	for(int i = 0; i < 16; ++i)
	{
		bs.Set(i);
	}

	if(!bs.All())
	{
		printf("All 3 failed\n...");
		success = false;
	}

	return success;
}
