#undef	NDEBUG
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <assert.h>
#include <errno.h>

#include "ncnf.h"
#include "ncnf_app.h"

const int cycles = 1000;

int
main(int ac, char **av) {
	ncnf_obj *root;
	ncnf_obj *new_root;
	char *configs[] = { "ncnf_test.conf", "ncnf_test.conf2" };
	int i;

	if(ac > 1) configs[0] = av[1];
	if(ac > 2) configs[1] = av[2];

	/*

		printf("Phase 0 started\n");

		for(i = 0; i < cycles * 10; i++) {
			printf("=========================\n");
			root = ncnf_read(configs[0]);
			if(root) {
				perror("Succeeded to read config file");
				return 1;
			}
		}
	*/

	printf("Phase I started\n");

	root = ncnf_read(configs[0]);
	ncnf_destroy(root);

	for(i = 0; i < cycles; i++) {
		root = ncnf_read(configs[0]);
		if(root == NULL) {
			perror("Failed to read configuration file");
			return 1;
		}
		ncnf_destroy(root);
	}

	printf("Phase I ended\n");
	printf("Phase II started\n");

	root = ncnf_read(configs[0]);
	if(root == NULL) {
		perror("Failed to read configuration file");
		return 1;
	}

	for(i = 0; i < cycles; i++) {

		new_root = ncnf_read(configs[(i + 1) & 1]);
		if(new_root == NULL) {
			perror("Failed to read second configuration file");
			return 1;
		}
	
		if(ncnf_diff(root, new_root)) {
			perror("Failure to diff two configuration trees");
			return 1;
		}
	
		ncnf_destroy(new_root);
	}

	ncnf_destroy(root);

	printf("Phase II ended\n");
	printf("Phase III started\n");

	root = ncnf_read(configs[0]);
	if(root == NULL) {
		perror("Failed to read configuration file");
		return 1;
	}

	ncnf_destroy(root);

	printf("Phase III ended\n");

	printf("Done\n");

	return 0;
}



syntax highlighted by Code2HTML, v. 0.9.1