// CS 2SC3 / SE 2S03 solution for assignment 6 -- Pouya Larjani #include #include #include #include #include #include "prog6.h" int vec_cmp(vector x, vector y) { return x.x==y.x && x.y==y.y; } vector genvec(double f) { vector v = {f * cos(f) - sqrt(f) + 1.1111, v.y = exp(sin(f)) + f * cos(f)}; return v; } int mark = 0; void assess(int c, const char* m) { mark += c?1:0; printf("Testing %s %s\n", m, c?"succeeded.":"failed!"); } void crash(int sig) { fprintf(stderr, "Program crashed!\n"); printf("Your mark is %d/20\n", mark); exit(sig); } time_t timer = 0; void get_time(const char* m) { time_t nt = time(0); if (timer > 0) { printf("!! Finished %s! delta = %ds\n", m, nt-timer); timer = 0; } else { printf("!! Starting %s...\n", m); timer = nt; } } int main() { int sorted = 1, i; signal(SIGABRT, crash); signal(SIGFPE , crash); signal(SIGILL , crash); signal(SIGINT , crash); signal(SIGSEGV, crash); signal(SIGTERM, crash); // Make store (2 marks) vec_store s1 = make_vec_store(), s2 = make_vec_store(); assess(s1->size == 0, "size of empty store"); assess(s2->size == 0, "size of empty store"); // Empty get (3 marks) get_vec(s1, 0); assess(s1->size == 0, "empty get"); get_vec(s2, 5); assess(s2->size == 0, "empty get"); get_vec(s1,-1); assess(s1->size == 0, "empty get"); // Insert (5 marks) insert_vec(s1, genvec(15)); assess(s1->size == 1, "inserting"); insert_vec(s2, genvec(55)); assess(s2->size == 1, "inserting"); insert_vec(s1, genvec(0 )); assess(s1->size == 2, "inserting"); assess(vec_cmp(get_vec(s2, 0), genvec(55)), "insertion sort"); assess(vec_cmp(get_vec(s1, 1), genvec(15)), "insertion sort"); print_vec_store(s1); print_vec_store(s2); // Delete (4 marks) delete_vec(s1, 0); assess(s1->size == 1, "delete"); delete_vec(s2, 0); assess(s2->size == 0, "delete"); assess(vec_cmp(get_vec(s1, 0), genvec(15)), "deletion sort"); delete_vec(s1, 0); assess(s1->size == 0, "delete"); // Full insert (3) get_time("inserting 10000 elements"); for (i=0; i<10000; i++) insert_vec(s1, genvec(i)); get_time("inserting 10000 elements"); insert_vec(s1, genvec(555)); assess(1, "large insert batch"); assess(s1->size == 10001, "size of batch insert"); get_time("comparing 10000 elements"); for (i=0; i<10000; i++) if (vec_mag(get_vec(s1,i)) > vec_mag(get_vec(s1,i+1))) sorted = 0; get_time("comparing 10000 elements"); assess(sorted, "sorted store after full insert"); // Full clean (3 marks) get_time("deleting 10000 elements"); for (i=0; i<10001; i++) delete_vec(s1, 0); get_time("deleting 10000 elements"); assess(1, "cleaning up"); assess(s1->size == 0, "size of full clean"); delete_vec(s1, 0); assess(s1->size == 0, "empty delete"); printf("Your mark is %d/20\n", mark); return 0; }