/* ============================================================================= * initializeManager * ============================================================================= */ static manager_t* initializeManager () { manager_t* managerPtr; long i; long numRelation; random_t* randomPtr; long* ids; bool_t (*manager_add[])(manager_t*, long, long, long) = { &manager_addCar_seq, &manager_addFlight_seq, &manager_addRoom_seq, &addCustomer }; long t; long numTable = sizeof(manager_add) / sizeof(manager_add[0]); printf("Initializing manager... "); fflush(stdout); randomPtr = random_alloc(); managerPtr = manager_alloc(); numRelation = (long)global_params[PARAM_RELATIONS]; ids = (long*)malloc(numRelation * sizeof(long)); for (i = 0; i < numRelation; i++) { ids[i] = i + 1; } for (t = 0; t < numTable; t++) { /* Shuffle ids */ for (i = 0; i < numRelation; i++) { long x = random_generate(randomPtr) % numRelation; long y = random_generate(randomPtr) % numRelation; long tmp = ids[x]; ids[x] = ids[y]; ids[y] = tmp; } /* Populate table */ for (i = 0; i < numRelation; i++) { bool_t status; long id = ids[i]; long num = ((random_generate(randomPtr) % 5) + 1) * 100; long price = ((random_generate(randomPtr) % 5) * 10) + 50; status = manager_add[t](managerPtr, id, num, price); } } /* for t */ puts("done."); fflush(stdout); random_free(randomPtr); free(ids); return managerPtr; }
int main () { manager_t* managerPtr; assert(memory_init(1, 4, 2)); puts("Starting..."); managerPtr = manager_alloc(); /* Test administrative interface for cars */ assert(!manager_addCar(managerPtr, 0, -1, 0)); /* negative num */ assert(!manager_addCar(managerPtr, 0, 0, -1)); /* negative price */ assert(!manager_addCar(managerPtr, 0, 0, 0)); /* zero num */ assert(manager_addCar(managerPtr, 0, 1, 1)); assert(!manager_deleteCar(managerPtr, 1, 0)); /* does not exist */ assert(!manager_deleteCar(managerPtr, 0, 2)); /* cannot remove that many */ assert(manager_addCar(managerPtr, 0, 1, 0)); assert(manager_deleteCar(managerPtr, 0, 1)); assert(manager_deleteCar(managerPtr, 0, 1)); assert(!manager_deleteCar(managerPtr, 0, 1)); /* none left */ assert(manager_queryCar(managerPtr, 0) == -1); /* does not exist */ /* Test administrative interface for rooms */ assert(!manager_addRoom(managerPtr, 0, -1, 0)); /* negative num */ assert(!manager_addRoom(managerPtr, 0, 0, -1)); /* negative price */ assert(!manager_addRoom(managerPtr, 0, 0, 0)); /* zero num */ assert(manager_addRoom(managerPtr, 0, 1, 1)); assert(!manager_deleteRoom(managerPtr, 1, 0)); /* does not exist */ assert(!manager_deleteRoom(managerPtr, 0, 2)); /* cannot remove that many */ assert(manager_addRoom(managerPtr, 0, 1, 0)); assert(manager_deleteRoom(managerPtr, 0, 1)); assert(manager_deleteRoom(managerPtr, 0, 1)); assert(!manager_deleteRoom(managerPtr, 0, 1)); /* none left */ assert(manager_queryRoom(managerPtr, 0) == -1); /* does not exist */ /* Test administrative interface for flights and customers */ assert(!manager_addFlight(managerPtr, 0, -1, 0)); /* negative num */ assert(!manager_addFlight(managerPtr, 0, 0, -1)); /* negative price */ assert(!manager_addFlight(managerPtr, 0, 0, 0)); assert(manager_addFlight(managerPtr, 0, 1, 0)); assert(!manager_deleteFlight(managerPtr, 1)); /* does not exist */ assert(!manager_deleteFlight(managerPtr, 2)); /* cannot remove that many */ assert(!manager_cancelFlight(managerPtr, 0, 0)); /* do not have reservation */ assert(!manager_reserveFlight(managerPtr, 0, 0)); /* customer does not exist */ assert(!manager_deleteCustomer(managerPtr, 0)); /* does not exist */ assert(manager_addCustomer(managerPtr, 0)); assert(!manager_addCustomer(managerPtr, 0)); /* already exists */ assert(manager_reserveFlight(managerPtr, 0, 0)); assert(manager_addFlight(managerPtr, 0, 1, 0)); assert(!manager_deleteFlight(managerPtr, 0)); /* someone has reservation */ assert(manager_cancelFlight(managerPtr, 0, 0)); assert(manager_deleteFlight(managerPtr, 0)); assert(!manager_deleteFlight(managerPtr, 0)); /* does not exist */ assert(manager_queryFlight(managerPtr, 0) == -1); /* does not exist */ assert(manager_deleteCustomer(managerPtr, 0)); /* Test query interface for cars */ assert(manager_addCustomer(managerPtr, 0)); assert(manager_queryCar(managerPtr, 0) == -1); /* does not exist */ assert(manager_queryCarPrice(managerPtr, 0) == -1); /* does not exist */ assert(manager_addCar(managerPtr, 0, 1, 2)); assert(manager_queryCar(managerPtr, 0) == 1); assert(manager_queryCarPrice(managerPtr, 0) == 2); assert(manager_addCar(managerPtr, 0, 1, -1)); assert(manager_queryCar(managerPtr, 0) == 2); assert(manager_reserveCar(managerPtr, 0, 0)); assert(manager_queryCar(managerPtr, 0) == 1); assert(manager_deleteCar(managerPtr, 0, 1)); assert(manager_queryCar(managerPtr, 0) == 0); assert(manager_queryCarPrice(managerPtr, 0) == 2); assert(manager_addCar(managerPtr, 0, 1, 1)); assert(manager_queryCarPrice(managerPtr, 0) == 1); assert(manager_deleteCustomer(managerPtr, 0)); assert(manager_queryCar(managerPtr, 0) == 2); assert(manager_deleteCar(managerPtr, 0, 2)); /* Test query interface for rooms */ assert(manager_addCustomer(managerPtr, 0)); assert(manager_queryRoom(managerPtr, 0) == -1); /* does not exist */ assert(manager_queryRoomPrice(managerPtr, 0) == -1); /* does not exist */ assert(manager_addRoom(managerPtr, 0, 1, 2)); assert(manager_queryRoom(managerPtr, 0) == 1); assert(manager_queryRoomPrice(managerPtr, 0) == 2); assert(manager_addRoom(managerPtr, 0, 1, -1)); assert(manager_queryRoom(managerPtr, 0) == 2); assert(manager_reserveRoom(managerPtr, 0, 0)); assert(manager_queryRoom(managerPtr, 0) == 1); assert(manager_deleteRoom(managerPtr, 0, 1)); assert(manager_queryRoom(managerPtr, 0) == 0); assert(manager_queryRoomPrice(managerPtr, 0) == 2); assert(manager_addRoom(managerPtr, 0, 1, 1)); assert(manager_queryRoomPrice(managerPtr, 0) == 1); assert(manager_deleteCustomer(managerPtr, 0)); assert(manager_queryRoom(managerPtr, 0) == 2); assert(manager_deleteRoom(managerPtr, 0, 2)); /* Test query interface for flights */ assert(manager_addCustomer(managerPtr, 0)); assert(manager_queryFlight(managerPtr, 0) == -1); /* does not exist */ assert(manager_queryFlightPrice(managerPtr, 0) == -1); /* does not exist */ assert(manager_addFlight(managerPtr, 0, 1, 2)); assert(manager_queryFlight(managerPtr, 0) == 1); assert(manager_queryFlightPrice(managerPtr, 0) == 2); assert(manager_addFlight(managerPtr, 0, 1, -1)); assert(manager_queryFlight(managerPtr, 0) == 2); assert(manager_reserveFlight(managerPtr, 0, 0)); assert(manager_queryFlight(managerPtr, 0) == 1); assert(manager_addFlight(managerPtr, 0, 1, 1)); assert(manager_queryFlightPrice(managerPtr, 0) == 1); assert(manager_deleteCustomer(managerPtr, 0)); assert(manager_queryFlight(managerPtr, 0) == 3); assert(manager_deleteFlight(managerPtr, 0)); /* Test query interface for customer bill */ assert(manager_queryCustomerBill(managerPtr, 0) == -1); /* does not exist */ assert(manager_addCustomer(managerPtr, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 0); assert(manager_addCar(managerPtr, 0, 1, 1)); assert(manager_addRoom(managerPtr, 0, 1, 2)); assert(manager_addFlight(managerPtr, 0, 1, 3)); assert(manager_reserveCar(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 1); assert(!manager_reserveCar(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 1); assert(manager_addCar(managerPtr, 0, 0, 2)); assert(manager_queryCar(managerPtr, 0) == 0); assert(manager_queryCustomerBill(managerPtr, 0) == 1); assert(manager_reserveRoom(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 3); assert(!manager_reserveRoom(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 3); assert(manager_addRoom(managerPtr, 0, 0, 2)); assert(manager_queryRoom(managerPtr, 0) == 0); assert(manager_queryCustomerBill(managerPtr, 0) == 3); assert(manager_reserveFlight(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 6); assert(!manager_reserveFlight(managerPtr, 0, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 6); assert(manager_addFlight(managerPtr, 0, 0, 2)); assert(manager_queryFlight(managerPtr, 0) == 0); assert(manager_queryCustomerBill(managerPtr, 0) == 6); assert(manager_deleteCustomer(managerPtr, 0)); assert(manager_deleteCar(managerPtr, 0, 1)); assert(manager_deleteRoom(managerPtr, 0, 1)); assert(manager_deleteFlight(managerPtr, 0)); /* Test reservation interface */ assert(manager_addCustomer(managerPtr, 0)); assert(manager_queryCustomerBill(managerPtr, 0) == 0); assert(manager_addCar(managerPtr, 0, 1, 1)); assert(manager_addRoom(managerPtr, 0, 1, 2)); assert(manager_addFlight(managerPtr, 0, 1, 3)); assert(!manager_cancelCar(managerPtr, 0, 0)); /* do not have reservation */ assert(manager_reserveCar(managerPtr, 0, 0)); assert(manager_queryCar(managerPtr, 0) == 0); assert(manager_cancelCar(managerPtr, 0, 0)); assert(manager_queryCar(managerPtr, 0) == 1); assert(!manager_cancelRoom(managerPtr, 0, 0)); /* do not have reservation */ assert(manager_reserveRoom(managerPtr, 0, 0)); assert(manager_queryRoom(managerPtr, 0) == 0); assert(manager_cancelRoom(managerPtr, 0, 0)); assert(manager_queryRoom(managerPtr, 0) == 1); assert(!manager_cancelFlight(managerPtr, 0, 0)); /* do not have reservation */ assert(manager_reserveFlight(managerPtr, 0, 0)); assert(manager_queryFlight(managerPtr, 0) == 0); assert(manager_cancelFlight(managerPtr, 0, 0)); assert(manager_queryFlight(managerPtr, 0) == 1); assert(manager_deleteCar(managerPtr, 0, 1)); assert(manager_deleteRoom(managerPtr, 0, 1)); assert(manager_deleteFlight(managerPtr, 0)); assert(manager_deleteCustomer(managerPtr, 0)); manager_free(managerPtr); puts("All tests passed."); return 0; }