Ejemplo n.º 1
0
/*========================[TESTS]========================*/
bool CreateNewGameTest()
{
	char* moduleName = getModule(); //e.g "/dev/snake0"
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);
		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask(); // to make sure im the second one
			//player 2 (black)
			b=open(moduleName, O_RDWR);
			ASSERT(b>=0);
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
    return true;
}
Ejemplo n.º 2
0
bool GetWinnerGameInProgressTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove = DOWN;
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		int ioctl_retval = ioctl(a, SNAKE_GET_WINNER);
        ASSERT(ioctl_retval == -1); // <----- game is not finished

		nextMove = RIGHT; 

		writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);


		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove = UP;

			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			int ioctl_retval = ioctl(b, SNAKE_GET_WINNER);
	        ASSERT(ioctl_retval == -1); // <----- game is not finished

			nextMove = RIGHT;

	        writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
	return true;	
}
Ejemplo n.º 3
0
bool GetWinnerBlackWinTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove[5];
		nextMove[0] = DOWN; 
		nextMove[1] = DOWN; 
		nextMove[2] = DOWN; 
		nextMove[3] = DOWN; 
		nextMove[4] = '\0'; 
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, nextMove, 4);	
		//ASSERT(writeval == 2); // <----- return 2 cause i did 2 moves succesfully, according to the metargelim

		int ioctl_retval = ioctl(a, SNAKE_GET_WINNER);
        ASSERT(ioctl_retval == 2); // <------- even if im white i should know that the black won!

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove[5];
			nextMove[0] = UP;
			nextMove[1] = RIGHT; 
			nextMove[2] = RIGHT; 
			nextMove[3] = RIGHT; 
			nextMove[4] = '\0'; 

			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, nextMove, 4);	
			//ASSERT(writeval == 1);  // <----- return 1 cause i did 1 moves succesfully, according to the metargelim

			int ioctl_retval = ioctl(b, SNAKE_GET_WINNER);
	        ASSERT(ioctl_retval == 2); // <----- i won!!!

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
	return true;	
}
Ejemplo n.º 4
0
bool CreateGameSameModuleAfterCancelTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);
		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask(); // to make sure im the second one
			//player 2 (black)
			b=open(moduleName, O_RDWR);
			ASSERT(b>=0);
			close(b); 
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
    close(a);
    close(b);

    // game was canceled, now we gonna try again
    doLongTask();

	int pid3 = fork();
	if(pid3 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR); //should fail
		ASSERT(a<0);
		doLongTask();
		_exit(0);
	} else {
		int pid4 = fork();
		if(pid4 == 0) {
			doLongTask(); // to make sure im the second one
			//player 2 (black)
			b=open(moduleName, O_RDWR);  //should fail
			ASSERT(b<0); 
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
    close(a);
    close(b);	
    return true;
}
Ejemplo n.º 5
0
bool MakeMultipleMovesWithIlligalMoveTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove[6];
		nextMove[0] = DOWN; 
		nextMove[1] = RIGHT; 
		nextMove[2] = '9';    //   <-------illigal!
		nextMove[3] = RIGHT; 
		nextMove[4] = UP; 
		nextMove[5] = '\0'; 
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, nextMove, 5);
		//ASSERT(writeval == -1); // <----- return -1 according to the metargelim for illigal move inside buffer

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove[4];
			nextMove[0] = UP;
			nextMove[1] = RIGHT; 
			nextMove[2] = RIGHT; 
			nextMove[3] = '\0'; 

			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, nextMove, 3);
			//ASSERT(writeval == 2); // <----- return 2 cause i did 2 moves succesfully, according to the metargelim

			doLongTask();
			close(b);
			_exit(0);
		} else {
			//waitpid(pid2, &status,WNOHANG);
			wait(&status);
		}

		//waitpid(pid1, &status,WNOHANG);
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 6
0
bool MakeMoveIlligalCharacterTest()
{
	char* moduleName = getModule();
	char board[BUFFER_SIZE+1];
	board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		char nextMove = DOWN;
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		//board after illigal move
		int readRes = read(a, board, BUFFER_SIZE);	
		ASSERT(readRes == BUFFER_SIZE); // <---- should success according to the metargelim even if the game over by the illigal char of black

		doLongTask();
		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask();
			char nextMove = '9';
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, &nextMove, 1);
			printf("\n\n[writeval=%d, should be=-1]\n\n", writeval);
			//ASSERT(writeval == -1); //<---- writing illigal char should return -1 according to the metargelim

			//board after illigal move
			int readRes = read(b, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE); // <---- should success according to the metargelim even if the game over by the illigal char of black


			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 7
0
bool BlackMakeMoveFirstTest()
{
	char* moduleName = getModule();
	char board[BUFFER_SIZE+1];
	board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		char nextMove = DOWN;
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		doLongTask();
		doLongTask();

		int writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		//board after move
		int readRes = read(a, board, BUFFER_SIZE);
		printf("\n\n[readRes=%d, BUFFER_SIZE=%d]\n\n", readRes, BUFFER_SIZE);
		ASSERT(readRes == BUFFER_SIZE);
		printf("board after move is:\n");
		printBoard(board);

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove = UP;
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 8
0
bool MakeMoveCrashSnakeTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove[4];
		nextMove[0] = DOWN; 
		nextMove[1] = DOWN; 
		nextMove[2] = DOWN; 
		nextMove[3] = '\0'; 
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, nextMove, 3);
		//ASSERT(writeval == 2); // <---- im the one who crashes so i did 2 step successfully

		doLongTask();
		doLongTask();
		doLongTask();
		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove[4];
			nextMove[0] = UP; 
			nextMove[1] = UP;   // <---- here game does already OVER
			nextMove[2] = UP; 
			nextMove[3] = '\0'; 
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, nextMove, 3);
			//ASSERT(writeval == 1); // <---- we successfully made 1 move inside write, return 1 according to the metargelim

			printDeadSnake();

			doLongTask();
			doLongTask();
			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 9
0
bool PrintBoardTest()
{
	char* moduleName = getModule();
	char board[BUFFER_SIZE+1];
	board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);


		int readRes = read(a, NULL, BUFFER_SIZE);
		printf("\n\n[readRes=%d, should be=-1]\n\n", readRes);
		ASSERT(readRes == -1); // <---- should bring 0 according to the metargelim (piazza return -EFAULT;)

		readRes = read(a, board, 0);
		printf("\n\n[readRes=%d, should be=0]\n\n", readRes);
		ASSERT(readRes == 0);	// <---- should bring 0 according to the metargelim (piazza return 0;)

		readRes = read(a, NULL, 0);
		printf("\n\n[readRes=%d, should be=0]\n\n", readRes);
		ASSERT(readRes == 0);	// <---- should bring 0 according to the metargelim (piazza return 0;)


		//LET PLAYER 2 THE CHANCE TO PRINT BEFORE I GO		
		int j;
		for (j = 0; j < 6; j++){
			doMediumTask();
		}

		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);
			int readRes = read(b, board, BUFFER_SIZE);
			printBoard(board);
			printf("\n\n[readRes=%d, should be=%d]\n\n", readRes,BUFFER_SIZE);
			ASSERT(readRes == BUFFER_SIZE);
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 10
0
bool MakeSimpleGameGameAux(char* myModuleName)
{
	char* moduleName = myModuleName;
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove = DOWN;
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove = UP;
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 11
0
bool SnakeGetColorTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int ioctl_retval = ioctl(a, SNAKE_GET_COLOR);
        ASSERT(ioctl_retval == 4);

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int ioctl_retval = ioctl(b, SNAKE_GET_COLOR);
        	ASSERT(ioctl_retval == 2);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}
    return true;
}
Ejemplo n.º 12
0
Archivo: test.c Proyecto: matannov/OS3
void doLongTaskWithPrint(void* a)
{
   printf("Doing a long task.. give me a break\n");
   long i;
   doLongTask(NULL);
   printingProgressBar();
   if (a==NULL)
   {
      printf("Finished long task.. carry on\n");
      printf("\n");
      return;
   }
   AwesomeContainer* con = (AwesomeContainer*)(a);
   con->awesomeNum = 1; // for success
   printf("Finished long task.. carry on\n");
   printf("\n");
}
Ejemplo n.º 13
0
bool PrintBoardSmallCountTest()
{
	char* moduleName = getModule();
	char board[BUFFER_SIZE+1];
	board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);



		//LET PLAYER 2 THE CHANCE TO PRINT BEFORE I GO		
		int j;
		for (j = 0; j < 6; j++){
			doMediumTask();
		}

		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);


			int readRes = read(b, board, 40);
			printBoard(board);
			ASSERT(readRes == 40);
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 14
0
//todo - get string instead of char!
void PlayFullGame()
{
	isGameBoy = 1;
	char nextMoveAux;
	int lastPlayer = 0;
	
	numOfPlayers = mmap(NULL, sizeof (*numOfPlayers), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*numOfPlayers = 0;

	gameHasEnded = mmap(NULL, sizeof (*gameHasEnded), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*gameHasEnded = -1; // game will be over if gameHasEnded is != -1
	
	nextMove = mmap(NULL, sizeof(*nextMove), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

	player = mmap(NULL, sizeof (*player), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*player = 100;

	Currentplayer = mmap(NULL, sizeof (*Currentplayer), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*Currentplayer = 0;

	a = mmap(NULL, sizeof (*a), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	b = mmap(NULL, sizeof (*b), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

	char* moduleName = "/dev/snake17";
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char board[BUFFER_SIZE+1];
		board[BUFFER_SIZE] = '\0';
		//player 1 (white)
		*a=open(moduleName, O_RDWR);
		*numOfPlayers = *numOfPlayers +1;
		while(*gameHasEnded == -1)
		{
			if(*player == 1)
			{
				*player = 0;
				*Currentplayer = 1;
				read(*a, board, BUFFER_SIZE); //board before
				printButtonPress(board,nextMove);

				int res = write(*a,nextMove, 1);
				if(res < 0 ) {*gameHasEnded =1;}

				read(*a, board, BUFFER_SIZE);
				printBoard(board);
				*player = 100;
			}
		}
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char board[BUFFER_SIZE];
			doLongTask();
			//player 2 (black)
			*b=open(moduleName, O_RDWR);
			*Currentplayer = -1;
			read(*b, board, BUFFER_SIZE);
			printBoard(board);
			*numOfPlayers = *numOfPlayers +1;
			while(*gameHasEnded == -1)
			{
				if(*player == -1)
				{
					*player = 0;
					*Currentplayer = -1;
					read(*b, board, BUFFER_SIZE);
					printButtonPress(board,nextMove);
					int res = write(*b,nextMove, 1);
					if(res < 0 ) {*gameHasEnded =1;}

					read(*b, board, BUFFER_SIZE);
					printBoard(board);
					*player = 100;
					*gameHasEnded = ioctl(*b, SNAKE_GET_WINNER);
				}
			}
			_exit(0);
		} else {
			printLogo();
			doLongTask();
			lastPlayer = -1;
			//manager
			while(*gameHasEnded == -1)
			{
				if(*player == 100 && *numOfPlayers==2)
				{
					char nm;
					scanf(" %c", &nm);
					if(nm != 'a' && nm != 'A' 
						&& nm != 's' && nm != 'S'
						&& nm != 'w' && nm != 'W'
						&& nm != 'd' && nm != 'D'

						&& nm != '2' && nm != '4'
						&& nm != '6' && nm != '8')
					{
						continue;
					}

					if (nm == 'w' || nm == 'W' || nm == '8')
					{     
						nextMoveAux = UP;
					}
					else if (nm == 's' || nm == 'S' || nm == '2')
					{
				    	nextMoveAux = DOWN;
					}
					else if (nm == 'a' || nm == 'A' || nm == '4')
					{
				    	nextMoveAux = LEFT;
					}
					else if (nm == 'd' || nm == 'D' || nm == '6')
					{
				    	nextMoveAux = RIGHT;
					}

					*nextMove = nextMoveAux; 
					*player = lastPlayer * (-1);
					lastPlayer = *player;
				}
			}
			printGameOver();
		    close(*a);
    		close(*b);	
			wait(&status);
		}
		wait(&status);
	}
	munmap(numOfPlayers, sizeof (*numOfPlayers));
	munmap(gameHasEnded, sizeof (*gameHasEnded));
	munmap(nextMove, sizeof (*nextMove));
	munmap(player, sizeof (*player));
	munmap(Currentplayer, sizeof (*Currentplayer));
	munmap(a, sizeof (*a));
	munmap(b, sizeof (*b));
}
Ejemplo n.º 15
0
bool TreeGamesAtTheSameTime()
{
	doNotPrint = 1;
	printf("This might take a while...\n");
	//some birocrat shit you can ignore
	char moduleName1[13]; moduleName1[0] = '\0';
	char moduleName2[13]; moduleName2[0] = '\0';
	char moduleName3[13]; moduleName3[0] = '\0';
	char* tempModule = getModule();
	strcpy(moduleName1, tempModule);
	tempModule = getModule();
	strcpy(moduleName2, tempModule);
	tempModule = getModule();
	strcpy(moduleName3, tempModule);
	doNotPrint = 0;

	//test start here
	static int *StartGames;
	StartGames = mmap(NULL, sizeof(*StartGames), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*StartGames = 0;

	int status;
	int game1 = fork();
	if(game1 == 0) 
	{
		//this will be game 1
		while(*StartGames==0)
		{
			//halt until everyone is ready
			;
		}
		printf("Im Entering driver: %s\n",moduleName1);
		MakeSimpleGameGameAux(moduleName1);
		_exit(0);
	}
	else
	{
			int game2 = fork();
			if(game2 == 0) 
			{
				//this will be game 2
				while(*StartGames==0)
				{
					//halt until everyone is ready
					;
				}
				printf("Im Entering driver: %s\n",moduleName2);
				MakeSimpleGameGameAux(moduleName2);
				_exit(0);
			}
			else
			{
					int game3 = fork();
					if(game3 == 0) 
					{
						//this will be game 3
						while(*StartGames==0)
						{
							//halt until everyone is ready
							;
						}
						printf("Im Entering driver: %s\n",moduleName3);
						MakeSimpleGameGameAux(moduleName3);
						_exit(0);
					}
					else
					{
							doLongTask();
							doLongTask();
							doLongTask();
							//Launch games!
							*StartGames=1;
						wait(&status);
					}
				wait(&status);
			}
		wait(&status);
	}
	munmap(StartGames, sizeof (*StartGames));
	return true;
}
Ejemplo n.º 16
0
bool MakeMultipleMovesTest()
{
	//you should see somthing like:
	// 3  2  1   (might also be with 4)
	//-3 -2 -1   (might also be with -4)
	char* moduleName = getModule();
	char board[BUFFER_SIZE+1];
	board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove[5];
		nextMove[0] = DOWN; 
		nextMove[1] = RIGHT; 
		nextMove[2] = RIGHT; 
		nextMove[3] = RIGHT; 
		nextMove[4] = '\0'; 
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int writeval = write(a, nextMove, 4);	
		//ASSERT(writeval == 4);

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove[5];
			nextMove[0] = UP;
			nextMove[1] = RIGHT; 
			nextMove[2] = RIGHT; 
			nextMove[3] = RIGHT; 
			nextMove[4] = '\0'; 

			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, nextMove, 4);	
			//ASSERT(writeval == 4);


			//board after move
			int readRes = read(b, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
			printBoard(board);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 17
0
bool TwoWhitesAgainstOneBlackTest()
{
	printf("\nno offend to black people, you guys are awesome!\n");
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int myBetterHalf = fork();
		if(myBetterHalf == 0)
		{
			char nextMove[5];
			nextMove[0] = DOWN; 
			nextMove[1] = RIGHT; 
			nextMove[2] = RIGHT; 
			nextMove[3] = RIGHT; 
			nextMove[4] = '\0'; 

			int writeval = write(a, nextMove, 4);	
			//ASSERT(writeval == 2); // <------ i did 2 good moves, give me a break
			_exit(0);
		}
		else
		{
			doLongTask();
			char nextMove[5];
			nextMove[0] = LEFT; 
			nextMove[1] = LEFT; 
			nextMove[2] = LEFT; 
			nextMove[3] = LEFT; 
			nextMove[4] = '\0'; 
			int writeval = write(a, nextMove, 4);			
			//ASSERT(writeval == -1); // <------ should be in the game after its already finished

			doLongTask();
			close(a);
			wait(&status);
		}
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove = UP;

			doLongTask();
			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 18
0
bool ThreeAgainstThreeTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);

		int myFirstSon = fork();
		if(myFirstSon == 0)
		{
			char nextMove[5];
			nextMove[0] = DOWN; 
			nextMove[1] = RIGHT; 
			nextMove[2] = RIGHT; 
			nextMove[3] = RIGHT; 
			nextMove[4] = '\0'; 

			int writeval = write(a, nextMove, 4);	
			//ASSERT(writeval == 4);
			_exit(0);
		}
		else
		{
			doLongTask();
			int mySecondSon = fork();
			if(mySecondSon == 0)
			{
				char nextMove[5];
				nextMove[0] = DOWN; 
				nextMove[1] = RIGHT; 
				nextMove[2] = RIGHT; 
				nextMove[3] = RIGHT; 
				nextMove[4] = '\0'; 

				int writeval = write(a, nextMove, 4);	
				//ASSERT(writeval == -1);
				_exit(0);
			}
			else
			{
				doLongTask();
				doLongTask();
				char nextMove[5];
				nextMove[0] = DOWN; 
				nextMove[1] = RIGHT; 
				nextMove[2] = RIGHT; 
				nextMove[3] = RIGHT; 
				nextMove[4] = '\0'; 
				int writeval = write(a, nextMove, 4);
					
				//ASSERT(writeval == -1);
				doLongTask();
				close(a);
				wait(&status);
			}
			wait(&status);
		}
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			//player 2 (black)
			b=open(moduleName, O_RDWR);
			ASSERT(b>=0);

			int myFirstSon = fork();
			if(myFirstSon == 0)
			{
				char nextMove = UP;

				int writeval = write(b, &nextMove, 1);	
				//ASSERT(writeval == 1);
				_exit(0);
			}
			else
			{
				int mySecondSon = fork();
				if(mySecondSon == 0)
				{
					doLongTask();
					char nextMove = RIGHT;

					int writeval = write(b, &nextMove, 1);	
					//ASSERT(writeval == 1);
					_exit(0);
				}
				else
				{
					//father code
					doLongTask();
					char nextMove = RIGHT;
					int writeval = write(b, &nextMove, 1);
						
					//ASSERT(writeval == 1);
					doLongTask();
					close(b);
					wait(&status);
				}
				wait(&status);
			}
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;
}
Ejemplo n.º 19
0
bool AgressiveReadWriteTest()
{
	char* moduleName = getModule();
	int a;
	int b;
	int status;
	int pid1 = fork();
	if(pid1 == 0) {
		char nextMove = DOWN;
		char board[BUFFER_SIZE+1];
		board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia
		//player 1 (white)
		a=open(moduleName, O_RDWR);
		ASSERT(a>=0);
		int i;
		for (i = 0; i < 500; ++i)
		{
			int readRes = read(a, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
		}

		int writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		for (i = 0; i < 500; ++i)
		{
			int readRes = read(a, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
		}		

		nextMove = RIGHT;
		writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		for (i = 0; i < 500; ++i)
		{
			int readRes = read(a, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
		}	

		nextMove = RIGHT;
		writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		for (i = 0; i < 500; ++i)
		{
			int readRes = read(a, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
		}	

		nextMove = RIGHT;
		writeval = write(a, &nextMove, 1);	
		//ASSERT(writeval == 1);

		for (i = 0; i < 500; ++i)
		{
			int readRes = read(a, board, BUFFER_SIZE);	
			ASSERT(readRes == BUFFER_SIZE);
		}	

		doLongTask();
		close(a);
		_exit(0);
	} else {
		int pid2 = fork();
		if(pid2 == 0) {
			char nextMove = UP;
			char board[BUFFER_SIZE+1];
			board[BUFFER_SIZE]='\0'; // <---- might be redundant but i cant leave it like that! it's a disturbia

			doLongTask();
			//player 2 (black)
			b=open(moduleName, O_RDWR); 
			ASSERT(b>=0);

			int i;
			for (i = 0; i < 500; ++i)
			{
				int readRes = read(b, board, BUFFER_SIZE);	
				ASSERT(readRes == BUFFER_SIZE);
			}

			int writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			for (i = 0; i < 500; ++i)
			{
				int readRes = read(b, board, BUFFER_SIZE);	
				ASSERT(readRes == BUFFER_SIZE);
			}		

			nextMove = RIGHT;
			writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			for (i = 0; i < 500; ++i)
			{
				int readRes = read(b, board, BUFFER_SIZE);	
				ASSERT(readRes == BUFFER_SIZE);
			}	

			nextMove = RIGHT;
			writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			for (i = 0; i < 500; ++i)
			{
				int readRes = read(b, board, BUFFER_SIZE);	
				ASSERT(readRes == BUFFER_SIZE);
			}	

			nextMove = RIGHT;
			writeval = write(b, &nextMove, 1);	
			//ASSERT(writeval == 1);

			for (i = 0; i < 500; ++i)
			{
				int readRes = read(b, board, BUFFER_SIZE);	
				ASSERT(readRes == BUFFER_SIZE);
			}	

			doLongTask();
			close(b);
			_exit(0);
		} else {
			wait(&status);
		}
		wait(&status);
	}	
    return true;	
}