Esempio n. 1
0
int main(void)
{
	vector<long long> BloomDataAddTime;
	vector<long long> BloomDataSubTime;
	vector<unsigned long long> BloomDataSize;
	
	std::cout << "ブルームフィルタテスト" << std::endl;
	std::cout << "測定開始" << std::endl;
	for (int count = 1; count <= 100; count++)
	{
		BloomFilter BF;
		auto Start = std::chrono::system_clock::now();
		for (int i = 0; i < 100; i++)
		{
			BF.AddText(to_string(i));
			std::cout << BF.GetFilter() << std::endl;
		}
		auto End = std::chrono::system_clock::now();
		auto Time = End - Start;
		auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(Time).count();
		BloomDataAddTime.push_back(ms);
		BloomDataSize.push_back(sizeof(BF));

		Start = std::chrono::system_clock::now();
		for (int i = 0; i < 100; i++)
		{
			BF.SubText(to_string(i));
			std::cout << BF.GetFilter() << std::endl;
		}
		End = std::chrono::system_clock::now();
		Time = End - Start;
		ms = std::chrono::duration_cast<std::chrono::milliseconds>(Time).count();
		BloomDataSubTime.push_back(ms);
	}
	std::cout << "測定終了" << std::endl;

	std::cout << "データ追加" << std::endl;
	std::sort(BloomDataAddTime.begin(), BloomDataAddTime.end());

	std::cout << "最低値" << std::endl;
	std::cout << "AddTime : "<< BloomDataAddTime.front() << std::endl;
	std::cout << "AddSize : " << BloomDataSize.front() << std::endl;

	std::cout << "最高値" << std::endl;
	std::cout << "AddTime : " << BloomDataAddTime.back() << std::endl;
	std::cout << "AddSize : " << BloomDataSize.back() << std::endl;

	std::cout << "中央値" << std::endl;
	if (BloomDataAddTime.size() % 2 == 0)
	{
		int pos = BloomDataAddTime.size() / 2;
		std::cout << "AddTime : " << (BloomDataAddTime[pos] + BloomDataAddTime[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "AddTime : " << BloomDataAddTime[(int)(BloomDataAddTime.size() / 2+1)]<< std::endl;
	}
	if (BloomDataSize.size() % 2 == 0)
	{
		int pos = BloomDataSize.size() / 2;
		std::cout << "AddSize : " << (BloomDataSize[pos] + BloomDataSize[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "AddSize : " << BloomDataSize[(int) (BloomDataSize.size() / 2 + 1)] << std::endl;
	}

	std::cout << "平均値" << std::endl;
	long long Average = 0;
	for (auto Time : BloomDataAddTime)
	{
		Average += Time;
	}
	std::cout << "AddTime : " << (float) Average / BloomDataAddTime.size() << std::endl;
	Average = 0;
	for (auto Time : BloomDataSize)
	{
		Average += Time;
	}
	
	std::cout << "データサイズ" << std::endl;
	std::sort(BloomDataSize.begin(), BloomDataSize.end());
	std::cout << "AddSize : " << (float) Average / BloomDataSize.size() << std::endl;

	std::cout << "データ削除" << std::endl;
	std::sort(BloomDataSubTime.begin(), BloomDataSubTime.end());

	std::cout << "最低値" << std::endl;
	std::cout << "SubTime : " << BloomDataSubTime.front() << std::endl;

	std::cout << "最高値" << std::endl;
	std::cout << "SubTime : " << BloomDataSubTime.back() << std::endl;

	std::cout << "中央値" << std::endl;
	if (BloomDataSubTime.size() % 2 == 0)
	{
		int pos = BloomDataSubTime.size() / 2;
		std::cout << "SubTime : " << (BloomDataSubTime[pos] + BloomDataSubTime[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "SubTime : " << BloomDataSubTime[(int) (BloomDataSubTime.size() / 2 + 1)] << std::endl;
	}

	std::cout << "平均値" << std::endl;
	Average = 0;
	for (auto Time : BloomDataSubTime)
	{
		Average += Time;
	}
	std::cout << "SubTime : " << (float) Average / BloomDataSubTime.size() << std::endl;
	std::cout << std::endl;
	
	
	vector<long long> CountingDataAddTime;
	vector<long long> CountingDataSubTime;
	vector<unsigned long long> CountingDataSize;
	std::cout << "カウンティングフィルタテスト" << std::endl;
	std::cout << "測定開始" << std::endl;
	for (int count = 1; count <= 100; count++)
	{
		CountingFilter CF;
		auto Start = std::chrono::system_clock::now();
		for (int i = 0; i < 100; i++)
		{
			CF.AddText(to_string(i));
			std::cout << CF.GetFilter() << std::endl;
		}
		auto End = std::chrono::system_clock::now();
		auto Time = End - Start;
		auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(Time).count();
		CountingDataAddTime.push_back(ms);
		CountingDataSize.push_back(sizeof(CF));

		Start = std::chrono::system_clock::now();
		for (int i = 0; i < 100; i++)
		{
			CF.SubText(to_string(i));
			std::cout << CF.GetFilter() << std::endl;
		}
		End = std::chrono::system_clock::now();
		Time = End - Start;
		ms = std::chrono::duration_cast<std::chrono::milliseconds>(Time).count();
		CountingDataSubTime.push_back(ms);
	}
	std::cout << "測定終了" << std::endl;

	std::cout << "データ追加" << std::endl;
	std::sort(CountingDataAddTime.begin(), CountingDataAddTime.end());

	std::cout << "最低値" << std::endl;
	std::cout << "AddTime : " << CountingDataAddTime.front() << std::endl;
	std::cout << "AddSize : " << CountingDataSize.front() << std::endl;

	std::cout << "最高値" << std::endl;
	std::cout << "AddTime : " << CountingDataAddTime.back() << std::endl;
	std::cout << "AddSize : " << CountingDataSize.back() << std::endl;

	std::cout << "中央値" << std::endl;
	if (CountingDataAddTime.size() % 2 == 0)
	{
		int pos = CountingDataAddTime.size() / 2;
		std::cout << "AddTime : " << (CountingDataAddTime[pos] + CountingDataAddTime[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "AddTime : " << CountingDataAddTime[(int) (CountingDataAddTime.size() / 2 + 1)] << std::endl;
	}
	if (CountingDataSize.size() % 2 == 0)
	{
		int pos = CountingDataSize.size() / 2;
		std::cout << "AddSize : " << (CountingDataSize[pos] + CountingDataSize[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "AddSize : " << CountingDataSize[(int) (CountingDataSize.size() / 2 + 1)] << std::endl;
	}

	std::cout << "平均値" << std::endl;
	Average = 0;
	for (auto Time : CountingDataAddTime)
	{
		Average += Time;
	}
	std::cout << "AddTime : " << (float) Average / CountingDataAddTime.size() << std::endl;
	Average = 0;
	for (auto Time : CountingDataSize)
	{
		Average += Time;
	}

	std::cout << "データサイズ" << std::endl;
	std::sort(CountingDataSize.begin(), CountingDataSize.end());
	std::cout << "AddSize : " << (float) Average / CountingDataSize.size() << std::endl;

	std::cout << "データ削除" << std::endl;
	std::sort(CountingDataSubTime.begin(), CountingDataSubTime.end());

	std::cout << "最低値" << std::endl;
	std::cout << "SubTime : " << CountingDataSubTime.front() << std::endl;

	std::cout << "最高値" << std::endl;
	std::cout << "SubTime : " << CountingDataSubTime.back() << std::endl;

	std::cout << "中央値" << std::endl;
	if (CountingDataSubTime.size() % 2 == 0)
	{
		int pos = CountingDataSubTime.size() / 2;
		std::cout << "SubTime : " << (CountingDataSubTime[pos] + CountingDataSubTime[pos + 1]) / 2 << std::endl;
	}
	else
	{
		std::cout << "SubTime : " << CountingDataSubTime[(int) (CountingDataSubTime.size() / 2 + 1)] << std::endl;
	}

	std::cout << "平均値" << std::endl;
	Average = 0;
	for (auto Time : CountingDataSubTime)
	{
		Average += Time;
	}
	std::cout << "SubTime : " << (float) Average / CountingDataSubTime.size() << std::endl;
	
	getchar();
	return 0;
}