Exemple #1
0
static void testStaticRandom() {
	unsigned int uirandResult;
	int irandResult;
	float ufrandResult, frandResult;
	
	sdrand(0);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2147418111u, "Expected 2147418111 but got %u\n", uirandResult);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2147352573u, "Expected 2147352573 but got %u\n", uirandResult);
	
	sdrand(0);
	irandResult = irand();
	TestCase_assert(irandResult == -65537, "Expected -65537 but got %d\n", irandResult);
	irandResult = irand();
	TestCase_assert(irandResult == -131075, "Expected -131075 but got %d\n", irandResult);
	
	sdrand(0);
	ufrandResult = ufrand(1.0f);
	TestCase_assert(fabs(ufrandResult - 0.999969f) < 0.00001f, "Expected 0.999969 but got %f\n", ufrandResult);
	ufrandResult = ufrand(1.0f);
	TestCase_assert(fabs(ufrandResult - 0.999939f) < 0.00001f, "Expected 0.999939 but got %f\n", ufrandResult);
	
	sdrand(0);
	frandResult = frand(1.0f);
	TestCase_assert(fabs(frandResult - -0.000031f) < 0.00001f, "Expected -0.000031 but got %f\n", frandResult);
	frandResult = frand(1.0f);
	TestCase_assert(fabs(frandResult - -0.000061f) < 0.00001f, "Expected -0.000061 but got %f\n", frandResult);
	
	sdrand(1000);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2081883111u, "Expected 2081883111 but got %u\n", uirandResult);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2147353574u, "Expected 2147353574 but got %u\n", uirandResult);
	
	sdrand(1000);
	irandResult = irand();
	TestCase_assert(irandResult == -65600537, "Expected -65600537 but got %d\n", irandResult);
	irandResult = irand();
	TestCase_assert(irandResult == -130074, "Expected -131075 but got %d\n", irandResult);
	
	sdrand(1000);
	ufrandResult = ufrand(2.0f);
	TestCase_assert(fabs(ufrandResult - 1.938905f) < 0.00001f, "Expected 1.938905 but got %f\n", ufrandResult);
	ufrandResult = ufrand(2.0f);
	TestCase_assert(fabs(ufrandResult - 1.999879f) < 0.00001f, "Expected 1.999879 but got %f\n", ufrandResult);
	
	sdrand(1000);
	frandResult = frand(2.0f);
	TestCase_assert(fabs(frandResult - -0.061095f) < 0.00001f, "Expected -0.061095 but got %f\n", frandResult);
	frandResult = frand(2.0f);
	TestCase_assert(fabs(frandResult - -0.000121f) < 0.00001f, "Expected -0.000121 but got %f\n", frandResult);
	
	sdrand(0);
	stirrand(1);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2147352573u, "Expected 2147352573 but got %u\n", uirandResult);
	
	sdrand(0);
	stirrand(2);
	uirandResult = uirand();
	TestCase_assert(uirandResult == 2147090425u, "Expected 2147090425 but got %u\n", uirandResult);
}
int main(int argc, char ** argv) {
	if (argc < 2) {
		printUsage();
		return EXIT_FAILURE;
	}
	
	if (!strcmp(argv[1], "-random")) {
		int randSeed = 0;
		unsigned int iterations = 3, stirIterations = 0, iteration;
		float frandRange = 1.0f;
		
		if (argc < 3) {
			printf("Specify random seed as argv[2] if desired; proceeding with %d\n", randSeed);
		} else {
			if (!sscanf(argv[2], "%d", &randSeed)) {
				printf("Couldn't parse \"%s\" as %%d; proceeding with random seed %d\n", argv[2], randSeed);
			}
		}
		
		if (argc < 4) {
			printf("Specify number of iterations as argv[3] if desired; proceeding with %u\n", iterations);
		} else {
			if (!sscanf(argv[3], "%u", &iterations)) {
				printf("Couldn't parse \"%s\" as %%u; proceeding with %u iterations\n", argv[3], iterations);
			}
		}
		
		if (argc < 5) {
			printf("Specify frand/ufrand range as argv[4] if desired; proceeding with %f\n", frandRange);
		} else {
			if (!sscanf(argv[4], "%f", &frandRange)) {
				printf("Couldn't parse \"%s\" as %%f; proceeding with frand/ufrand range %f\n", argv[4], frandRange);
			}
		}
		
		if (argc < 6) {
			printf("Specify stir iterations as argv[5] if desired; proceeding with %u\n", stirIterations);
		} else {
			if (!sscanf(argv[5], "%u", &stirIterations)) {
				printf("Couldn't parse \"%s\" as %%u; proceeding with %u stir iterations\n", argv[5], stirIterations);
			}
		}
		
		printf("sdrand(%d);\n", randSeed);
		sdrand(randSeed);
		if (stirIterations > 0) {
			printf("stirrand(%u)\n", stirIterations);
			stirrand(stirIterations);
		}
		for (iteration = 0; iteration < iterations; iteration++) {
			printf("uirand(): %u\n", uirand());
		}
		printf("\nsdrand(%d);\n", randSeed);
		sdrand(randSeed);
		if (stirIterations > 0) {
			printf("stirrand(%u)\n", stirIterations);
			stirrand(stirIterations);
		}
		for (iteration = 0; iteration < iterations; iteration++) {
			printf("irand(): %d\n", irand());
		}
		printf("\nsdrand(%d);\n", randSeed);
		sdrand(randSeed);
		if (stirIterations > 0) {
			printf("stirrand(%u)\n", stirIterations);
			stirrand(stirIterations);
		}
		for (iteration = 0; iteration < iterations; iteration++) {
			printf("ufrand(%f): %f\n", frandRange, ufrand(frandRange));
		}
		printf("\nsdrand(%d);\n", randSeed);
		sdrand(randSeed);
		if (stirIterations > 0) {
			printf("stirrand(%u)\n", stirIterations);
			stirrand(stirIterations);
		}
		for (iteration = 0; iteration < iterations; iteration++) {
			printf("frand(%f): %f\n", frandRange, frand(frandRange));
		}
		fflush(stdout);
		
	} else if (!strcmp(argv[1], "-tempfile")) {
		char * template = "tmpXXXXXX";
void Test_1::Input(SDL_Event E) {
		int i,j;
		Float x,y,z;
		palBodyBase *pb= NULL;
		palCompoundBodyBase *pcb = NULL;
		switch(E.type) {
		case SDL_KEYDOWN:
			switch (E.key.keysym.sym) {
			case SDLK_1:
				pb = CreateBody("palBox",sfrand()*3,sfrand()*2+5.0f,sfrand()*3,ufrand()+0.1f,ufrand()+0.1f,ufrand()+0.1f,1);
				if (pb == NULL) {
					printf("Error: Could not create a box\n");
				} 
				break;
			case SDLK_q:
				pb = CreateBody("palStaticBox",sfrand()*3,sfrand()*2+3.0f,sfrand()*3,ufrand()+0.1f,ufrand()+0.1f,ufrand()+0.1f,1);
				if (pb == NULL) {
					printf("Error: Could not create a static box\n");
				} 
				break;
			case SDLK_2:
				palSphere *ps;
				ps = NULL;
				ps=dynamic_cast<palSphere *>(PF->CreateObject("palSphere"));
				if (ps) {
					ps->Init(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,0.5f*ufrand()+0.05f,1);
					BuildGraphics(ps);
				} else {
					printf("Error: Could not create a sphere\n");
				} 
				pb = ps;
				break;
			case SDLK_w:
				pb = CreateBody("palStaticSphere",sfrand()*3,sfrand()*2+3.0f,sfrand()*3,0.5*ufrand()+0.05f,0,0,1);
				if (pb == NULL) {
					printf("Error: Could not create a static sphere\n");
				} 
				break;
			case SDLK_3:
				palCapsule *pc;
				pc = NULL;
				pc=dynamic_cast<palCapsule *>(PF->CreateObject("palCapsule"));
				if (pc) {
					float radius=0.5f*ufrand()+0.05f;
					pc->Init(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,radius,radius+ufrand()+0.1f,1);
					BuildGraphics(pc);
				} else {
					printf("Error: Could not create a cylinder\n");
				} 
				pb = pc;
				break;
			case SDLK_4:
				{
				int dist;
				dist = 3;
				float mult;
				mult = 1.0f;
				for (j=-dist;j<dist;j++)
					for (i=-dist;i<dist;i++) {
						pb = CreateBody("palBox",i*mult,5.0f,j*mult,0.25,0.25,0.25,1.0f);
					}
				pb = 0;
				}
				break;
			case SDLK_r:
				{
				int dist;
				dist = 3;
				float mult;
				mult = 1.0f;
				for (j=-dist;j<dist;j++)
					for (i=-dist;i<dist;i++) {
						pb = CreateBody("palStaticBox",i*mult,1.0f,j*mult,0.25,0.25,0.25,1.0f);
					}
				pb = 0;
				}
				break;
			case SDLK_5:
				x = sfrand()*3;
				y = sfrand()*2+3.0f;
				z = sfrand()*3;
				pcb = dynamic_cast<palCompoundBodyBase *>(PF->CreateObject("palCompoundBody"));
				if (!pcb)
					return;
				dynamic_cast<palCompoundBody *>(pcb)->Init(x,y,z);
			case SDLK_t:
				if (!pcb) {
					x = sfrand()*3;
					y = sfrand()*2+3.0f;
					z = sfrand()*3;
					pcb = dynamic_cast<palCompoundBodyBase *>(PF->CreateObject("palStaticCompoundBody"));
					if (!pcb)
						return;
					dynamic_cast<palStaticCompoundBody *>(pcb)->Init(x,y,z);
				}
				if (pcb) {
					palBoxGeometry *pbg;
					pbg = pcb->AddBox();
					if (pbg) {
						palMatrix4x4 m;
						mat_identity(&m);
						mat_translate(&m,1+x,y,z);
						pbg->Init(m,1,1,1,1);
					}
					pbg = pcb->AddBox();
					if (pbg) {
						palMatrix4x4 m;
						mat_identity(&m);
						mat_translate(&m,-1+x,y,z);
						pbg->Init(m,1,1,1,1);
					}
					pcb->Finalize();
					BuildGraphics(pcb);
				} else {
					printf("Error: Could not create a compound body\n");
				}
				pb = pcb;
				break;
			case SDLK_6:
				palConvex *pcv;
				pcv = NULL;
				pcv=dynamic_cast<palConvex *>(PF->CreateObject("palConvex"));
				if (pcv) {
					Float pVerts[(36+36+1)*3];
					int nVerts = (36+36+1);
					MakeConvexCone(pVerts);
					pcv->Init(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,pVerts,nVerts,1);
				//	float radius=0.5f*ufrand()+0.05f;
				//	pc->Init(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,radius,radius+ufrand()+0.1f,1);
					BuildGraphics(pcv);
				} else {
					printf("Error: Could not create a convex object\n");
				} 
				pb = pcv;
				break;
			case SDLK_y:
				{
				palStaticConvex *pcv;
				pcv = NULL;
				pcv=dynamic_cast<palStaticConvex *>(PF->CreateObject("palStaticConvex"));
				if (pcv) {
					Float pVerts[(36+36+1)*3];
					int nVerts = (36+36+1);
					MakeConvexCone(pVerts);
					pcv->Init(sfrand()*3,sfrand()*2+3.0f,sfrand()*3,pVerts,nVerts);
				//	float radius=0.5f*ufrand()+0.05f;
				//	pc->Init(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,radius,radius+ufrand()+0.1f,1);
					BuildGraphics(pcv);
				} else {
					printf("Error: Could not create a static convex object\n");
				} 
				pb = pcv;
				}
				break;
			case SDLK_7:
//				palCompoundBody *pcb;
				pcb = NULL;
				pcb = dynamic_cast<palCompoundBody *>(PF->CreateObject("palCompoundBody"));
				if (pcb) {
					
					Float x = sfrand()*3;
					Float y = sfrand()*2+5.0f;
					Float z = sfrand()*3;
					
					dynamic_cast<palCompoundBody *>(pcb)->Init(x,y,z);
					

					Float pVerts[(36+36+1)*3];
					int nVerts = (36+36+1);
					MakeConvexCone(pVerts);
				
					palConvexGeometry *pcg = 0;
					pcg = pcb->AddConvex();
					if (pcg) {
						palMatrix4x4 m;
						mat_identity(&m);
						mat_translate(&m,1+x,y,z);
						pcg->Init(m,pVerts,nVerts,1);
					}
					pcg = pcb->AddConvex();
					if (pcg) {
						palMatrix4x4 m;
						mat_identity(&m);
						mat_translate(&m,-1+x,y,z);
						pcg->Init(m,pVerts,nVerts,1);
					}

					pcb->Finalize();
					BuildGraphics(pcb);
				} else {
					printf("Error: Could not create a convex object\n");
				} 
				pb = pcb;
				break;	
			case SDLK_8:
				{
					if (bodies.size()>0) {
						int r= rand() % bodies.size();
						palBody *body = dynamic_cast<palBody*>(bodies[r]);
							if (body) {
						
						body->SetPosition(sfrand()*3,sfrand()*2+5.0f,sfrand()*3,ufrand()*M_PI,ufrand()*M_PI,ufrand()*M_PI);
						body->SetActive(true);
							}
					}
				}
				break;
			case SDLK_9:
				if (bodies.size()>0) {
				DeleteGraphics(bodies[0]);
				delete bodies[0];
				
				bodies.erase(bodies.begin());
				}
				break;
			} 
			if (pb) {
				bodies.push_back(pb);
			}
			break;
		}
	}