#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include "projcommon.c"

char num_to_buffer_utest(){
	uint8_t *b = malloc(8);
	uint32_t original = 1235457890;
	uint32_t result;
	num_to_buffer(b, original);
	result = buffer_to_num(b);
	if(result != original){
		printf("Correct: %i, Result: %i", original, result);
		printf("num_to_buffer & buffer_to_num: FAIL\n");
		return 0;
	} else {
		printf("num_to_buffer & buffer_to_num: success\n");
		return 1;	
	}
}
void f(){ fflush(stderr); }


char packet_to_buffer_utest(){
	uint8_t *buffer;
	struct packet *original_packet = malloc(sizeof(struct packet));
	struct packet *result_packet;
	int i;
	unsigned int buffer_size;
	original_packet->type = 'R';
	original_packet->sequence = 0xDEADBEEF;
	original_packet->length = 512;
	original_packet->payload = malloc(original_packet->length);
	while(i<original_packet->length){
		/* Make an example message which is just % 256 */ 
		*(original_packet->payload+i) = i % 256;
		i++;
	}
	buffer = packet_to_buffer(original_packet, &buffer_size);

	result_packet = buffer_to_packet(buffer);
	if(result_packet->type != original_packet->type) {
		printf("type: Correct: %c, Result: %c\n", original_packet->type,
				result_packet->type);
		printf("packet_to_buffer & buffer_to_packet: FAIL");
		return 0;
	}
	if(result_packet->sequence != original_packet->sequence) {
		printf("sequence: Correct: %016x, Result: %016x\n", 
				original_packet->sequence,
				result_packet->sequence);
		printf("packet_to_buffer & buffer_to_packet: FAIL");
		return 0;
	}
	if(result_packet->length   != original_packet->length  ) {
		printf("length: Correct: %016x, Result: %016x\n", 
				original_packet->length  ,
				result_packet->length  );
		printf("packet_to_buffer & buffer_to_packet: FAIL");
		return 0;
	}
	i=0
		;
	while(i<original_packet->length){
		if(*(original_packet->payload + i) != 
				*(result_packet->payload+i)){
			printf("payload: Payload does not match at %i, should be: %02x", i,
					*(result_packet->payload+i) );
			printf("packet_to_buffer & buffer_to_packet: FAIL");
			return 0;
		}
		i++;
	}
	printf("packet_to_buffer & buffer_to_packet: success\n");
	return 1;	
}



int main(){
	num_to_buffer_utest();
	packet_to_buffer_utest();
	return 0;
}







