Пример #1
0
	/** assert that cumulative values are correctly calculated when drawing the first time */
	TEST(DrawList, Cumulative) {

		DrawList<MyData> list;
		list.push_back(MyData(), 0.11);
		list.push_back(MyData(), 0.22);
		list.push_back(MyData(), 0.33);
		list.push_back(MyData(), 0.44);
		list.push_back(MyData(), 0.55);
		list.push_back(MyData(), 0.66);

		for (DrawListEntry<MyData>& dle : list.entries) {
			ASSERT_EQ(0, dle.cumulativeProbability);
		}

		list.draw();

		ASSERT_FLOAT_EQ(0.11f, list.entries[0].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.33f, list.entries[1].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.66f, list.entries[2].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.10f, list.entries[3].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.65f, list.entries[4].cumulativeProbability);
		ASSERT_FLOAT_EQ(2.31f, list.entries[5].cumulativeProbability);

		list.set(0, MyData(), 0.22);

		ASSERT_FLOAT_EQ(0.00f, list.entries[0].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.33f, list.entries[1].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.66f, list.entries[2].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.10f, list.entries[3].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.65f, list.entries[4].cumulativeProbability);
		ASSERT_FLOAT_EQ(2.31f, list.entries[5].cumulativeProbability);

		list.draw();

		ASSERT_FLOAT_EQ(0.22f, list.entries[0].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.44f, list.entries[1].cumulativeProbability);
		ASSERT_FLOAT_EQ(0.77f, list.entries[2].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.21f, list.entries[3].cumulativeProbability);
		ASSERT_FLOAT_EQ(1.76f, list.entries[4].cumulativeProbability);
		ASSERT_FLOAT_EQ(2.42f, list.entries[5].cumulativeProbability);

	}
Пример #2
0
	void TestDrawListRandom(int numEntries) {

		DrawList<MyData> list;
		std::vector<double> configured;
		std::vector<double> drawn;

		const unsigned int cnt = numEntries;
		const unsigned int numDraw = cnt * 4096;
		double probSum = 0;

		list.resize(cnt);
		drawn.resize(cnt);
		configured.resize(cnt);

		// fill
		for (unsigned int i = 0; i < cnt; ++i) {
			double rnd = double(rand()) / double(RAND_MAX);
			configured[i] = rnd;
			list.set(i, MyData(i,i), rnd);
			probSum += rnd;
		}

		// draw
		for (unsigned int i = 0; i < numDraw; ++i) {
			MyData& d = list.draw();
			drawn[d.x]++;
		}

		// compare
		for (unsigned int i = 0; i < cnt; ++i) {
			double a = (configured[i] / probSum);
			double b = (drawn[i] / numDraw);
			ASSERT_NEAR(a, b, a*0.50);			// allow 50% difference between cfg and drawn
		}

	}
Пример #3
0
	TEST(DrawList, draw) {

		DrawList<MyData> list;
		list.push_back(MyData(0,1), 0.1);
		list.push_back(MyData(1,2), 0.1);
		list.push_back(MyData(2,3), 0.1);
		list.push_back(MyData(3,4), 0.1);
		list.push_back(MyData(4,6), 0.2);
		list.push_back(MyData(6,10), 0.4);

		ASSERT_EQ(0, list.draw(0.00).x);
		ASSERT_EQ(0, list.draw(0.05).x);
		ASSERT_EQ(0, list.draw(0.09).x);

		ASSERT_EQ(1, list.draw(0.11).x);
		ASSERT_EQ(1, list.draw(0.15).x);
		ASSERT_EQ(1, list.draw(0.19).x);

		ASSERT_EQ(2, list.draw(0.201).x);
		ASSERT_EQ(2, list.draw(0.25).x);
		ASSERT_EQ(2, list.draw(0.299).x);

		ASSERT_EQ(3, list.draw(0.30001).x);
		ASSERT_EQ(3, list.draw(0.3333).x);
		ASSERT_EQ(3, list.draw(0.399999).x);

		ASSERT_EQ(4, list.draw(0.40001).x);
		ASSERT_EQ(4, list.draw(0.4333).x);
		ASSERT_EQ(4, list.draw(0.599999).x);

		ASSERT_EQ(6, list.draw(0.600001).x);
		ASSERT_EQ(6, list.draw(0.7).x);
		ASSERT_EQ(6, list.draw(0.999999).x);

	}