From c5d89d1ba78a82e6b31aa498fb0f21c4d527e752 Mon Sep 17 00:00:00 2001 From: leiyu3 Date: Thu, 22 Sep 2022 11:41:31 -0400 Subject: write test up to remove_val --- Makefile | 15 +++++---- libvector.c | 6 ++-- main.c | 36 -------------------- vector_test.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 45 deletions(-) delete mode 100644 main.c create mode 100644 vector_test.c diff --git a/Makefile b/Makefile index 14ec6f7..c251fac 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,20 @@ CC=clang CFLAGS=-Wall -g -BINS = vector.o libvector.a main test +BINS = vector.o libvector.a vector_test all: $(BINS) vector.o: vector.h libvector.c $(CC) $(CFLAGS) -c libvector.c libvector.a: libvector.o - ar -cvq libvector.a libvector.o + ar -cvq $@ $< -main: main.c libvector.a - $(CC) $(CFLAGS) -o $@ $^ +vector_test: vector_test.c libvector.a + $(CC) $(CFLAGS) -o $@ $^ -lcriterion -test: test.c - gcc test.c -o test -lcriterion +test: + ./vector_test + +clean: + rm *.o *.a diff --git a/libvector.c b/libvector.c index b113abe..60e6e42 100644 --- a/libvector.c +++ b/libvector.c @@ -33,9 +33,9 @@ int is_full(vector_t vec){ } int at(vector_t vec, int index){ - if (index >= vec.max_size){ + if (index >= size(vec) || index < 0){ printf("Index out of bound!!\n"); - exit(1); + exit(-1); } return vec.arr[index]; @@ -46,7 +46,7 @@ void push(vector_t *vec, int value){ printf("Array out of Size!!\n\ Can't push!! \n\ Not yet implemented resize!!\n"); - exit(1); + exit(-1); } vec->arr[vec->cur_size] = value; diff --git a/main.c b/main.c deleted file mode 100644 index 0c0b282..0000000 --- a/main.c +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include "vector.h" - -int main(void){ - vector_t vec = vector_init(16); - - printf("The size of the vector is %d.\n", size(vec)); - printf("The capacity of the vector is %d.\n", capacity(vec)); - printf("is_empty returns: %d.\n", is_empty(vec)); - - - printf("-----\n"); - - for (int i = 0; i < vec.max_size; i++){ - if (i%2 == 0){ - push(&vec, 5); - continue; - } - push(&vec, i); - } - print_vec(vec); - remove_val(&vec, 5); - /* for (int i = 0; i < vec.max_size; i++){ */ - /* printf("pop: %d\n", pop(&vec)); */ - /* delete_vec(&vec, 0); */ - /* } */ - - printf("The size of the vector is %d.\n", size(vec)); - printf("The first element of the vector is %d.\n", at(vec, 0)); - printf("is_empty returns: %d.\n", is_empty(vec)); - print_vec(vec); - - destroy_vec(&vec); - return 0; -} diff --git a/vector_test.c b/vector_test.c new file mode 100644 index 0000000..c1f1ae4 --- /dev/null +++ b/vector_test.c @@ -0,0 +1,103 @@ +#include +#include "vector.h" + +vector_t vec; +int n = 16; +void suitesetup(void){ + vec = vector_init(n); +} + +void suiteteardown(void){ + destroy_vec(&vec); +} + +TestSuite(vectortests, .init=suitesetup, .fini=suiteteardown); + +Test(vectortests, capacity_test){ + cr_expect(capacity(vec) == n, "Vector should have a capacity of %d", n); + cr_expect(capacity(vec) != n+1, "vector should have a capacity of %d", n); +} + +Test(vectortests, is_empty_test){ + cr_assert(is_empty(vec)==1, "is_empty should return 1"); + push(&vec, 1); + cr_assert(is_empty(vec)==0, "is_empty should return 0"); +} + +Test(vectortests, is_full_test){ + cr_assert(is_full(vec)==0, "is_full should return 0"); + for (int i = 0; i < n; i++){ + push(&vec, i); + } + cr_assert(is_full(vec)==1, "is_full should return 1"); +} + +Test(vectortests, size_test){ + cr_assert(size(vec)==0, "Size of vector should be 0 at first"); + for (int i = 0; i < 10; i++){ + push(&vec, i); + } + cr_assert(size(vec)==10, "Size of vector should be 10"); +} + +Test(vectortests, at_test){ + for (int i = 0; i < 10; i++){ + push(&vec, i+3); + } + cr_assert(at(vec, 6)==9, "at(vec, 6) should return 9"); +} + +Test(vectortests, at_invalid_index_test, .exit_code = -1, .disabled=true){ + at(vec, -5); +} + +Test(vectortests, push_test){ + push(&vec, 3); + push(&vec, 6); + push(&vec, 9); + + cr_assert(at(vec, 1) == 6); + cr_assert(size(vec) == 3); +} + +Test(vectortests, insert_test){ + push(&vec, 3); + push(&vec, 6); + push(&vec, 9); + insert(&vec, 1, 55); + + cr_assert(at(vec, 1) == 55); + cr_assert(at(vec, 2) == 6); + cr_assert(at(vec, 3) == 9); + cr_assert(size(vec) == 4); +} + +Test(vectortests, delete_check){ + push(&vec, 3); + push(&vec, 6); + push(&vec, 9); + insert(&vec, 1, 55); + delete_vec(&vec, 1); + + cr_assert(at(vec, 1) == 6); + cr_assert(size(vec) == 3); +} + +Test(vectortests, remove_test){ + for (int i = 0; i < vec.max_size; i++){ + if (i%2 == 0){ + push(&vec, 5); + continue; + } + push(&vec, i); + } + + remove_val(&vec, 5); + + cr_assert(size(vec) == 7); + cr_assert(at(vec, 2) == 7); +} + + + + -- cgit v1.2.3