drive.c
drive.c
/* Part of a driver used to test dbase */
/* Include those modules that export things that are used explicitly here */
# include <stdio.h>
# include <assert.h>
#include "bool.h"
#include "employee.h"
#include "empset.h"
#include "dbase.h"
int main (int argc, /*@unused@*/ char *argv[])
{
employee e;
empset em1, em2, em3;
char na[10000];
char * sprintResult;
int i;
db_status status;
db_q q;
/* Initialize all of the LCL-specified modules that were included */
bool_initMod();
employee_initMod();
empset_initMod();
db_initMod();
if (argc != 1)
{
printf ("FormatPos: Wrong number of arguments. Given %d needs 0.\n",
argc - 1);
return 1;
}
/* Unit test empset */
em1 = empset_create();
if (!(empset_size(em1) == 0))
{
printf("Size should be 0.\n");
}
for (i = 0; i < 500; i++)
{
e.ssNum = i;
e.salary = 100000;
e.gen = MALE;
e.j = MGR;
(void) sprintf(na, "S.S. Doe %d", i);
check (employee_setName(&e, na));
empset_insert(em1, e);
}
if (!(empset_size(em1) == 500))
{
printf("Size should be 500.\n");
}
for (i = 0; i < 250; i++)
{
e.ssNum = i;
e.salary = 100000;
e.gen = MALE;
e.j = MGR;
(void) sprintf(na, "S.S. Doe %d", i);
check (employee_setName(&e, na));
empset_delete(em1, e);
}
if (!(empset_size(em1) == 250))
{
printf("Size should be 250.\n");
}
em2 = empset_create();
for (i = 0; i < 100; i++)
{
e.ssNum = i;
e.salary = 100000;
e.gen = MALE;
e.j = MGR;
(void) sprintf(na, "S.S. Doe %d", i);
check (employee_setName(&e, na));
empset_insert(em2, e);
}
em3 = empset_union(em1, em2);
if (!(empset_size(em3) == 350))
{
printf("Size should be 350.\n");
}
empset_intersect(em3, em3);
if (!(empset_size(em3) == 350))
{
printf("Size should be 350.\n");
}
printf("Print two different employees:\n");
for (i = 0; i < 2; i++)
{
e = empset_choose(em3);
employee_sprint(na, e);
printf("%s\n", &(na[0]));
empset_delete(em3, e);
}
/* Test dbase */
for (i = 0; i < 20; i++)
{
e.ssNum = i;
e.salary = 10 * i;
if (i < 10) e.gen = MALE; else e.gen = FEMALE;
if (i < 15) e.j = NONMGR; else e.j = MGR;
(void) sprintf(na, "J. Doe %d", i);
check (employee_setName(&e, na));
if ((i/2)*2 == i)
{
check (db_hire(e) == DBS_OK);
}
else
{
db_uncheckedHire(e); status = db_hire(e);
}
}
printf("Should print true: %s\n",
bool_unparse (/*@-usedef@*/ status == DBS_DUPLERR /*@=usedef@*/));
printf("Employees 0 - 19\n");
db_print();
check (db_fire(17));
q.g = FEMALE; q.j = JOB_UNKNOWN; q.l = 158; q.h = 185;
printf("Employees 0 - 16, 18 - 19\n");
db_print();
empset_final (em1);
i = db_query(q, em1 = empset_create());
sprintResult = empset_sprint(em1);
printf("Should get two females: %d\n%s\n", i, sprintResult);
free(sprintResult);
q.g = MALE; q.j = NONMGR; q.l = 0; q.h = 185;
empset_final (em2);
i = db_query(q, em2 = empset_create());
empset_final (em3);
em3 = empset_disjointUnion(em2, em1);
sprintResult = empset_sprint(em3);
i = empset_size(em3);
printf("Should get two females and ten males: %d\n%s\n", i, sprintResult);
free(sprintResult);
empset_intersect(em1, em3);
sprintResult = empset_sprint(em1);
i = empset_size(em1);
printf("Should get two females: %d\n%s\n", i, sprintResult);
free(sprintResult);
check (db_fire(empset_choose(em3).ssNum));
printf("Should get 18 employees\n");
db_print();
empset_final (em1);
empset_final (em2);
empset_final (em3);
return 0;
}
David Evans
University of Virginia, Computer Science
evans@cs.virginia.edu