aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-01 21:21:10 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-01 21:21:10 +0200
commita1675f56b35f5521a91851bae8ca650706374ae6 (patch)
tree73bf00503b27ac4e548ae66bf7789eff4eb8eede
parent9316f2063255bd4a0abd5c38d4c065969a8980bb (diff)
downloadlibft-a1675f56b35f5521a91851bae8ca650706374ae6.tar.gz
libft-a1675f56b35f5521a91851bae8ca650706374ae6.tar.bz2
libft-a1675f56b35f5521a91851bae8ca650706374ae6.zip
Added vector
-rw-r--r--Doxyfile4
-rw-r--r--include/libft_vec.h46
-rw-r--r--src/vec/ft_vecdestroy.c29
-rw-r--r--src/vec/ft_vecgrow.c43
-rw-r--r--src/vec/ft_veciter.c31
-rw-r--r--src/vec/ft_vecnew.c38
-rw-r--r--src/vec/ft_vecpop.c28
-rw-r--r--src/vec/ft_vecpush.c30
-rw-r--r--test/include/libft_test.h2
-rw-r--r--test/src/main.c8
-rw-r--r--test/src/runner/test_runner_vec.c45
-rw-r--r--test/src/vec/test_ft_vecdestroy.c26
-rw-r--r--test/src/vec/test_ft_vecgrow.c47
-rw-r--r--test/src/vec/test_ft_veciter.c52
-rw-r--r--test/src/vec/test_ft_vecnew.c47
-rw-r--r--test/src/vec/test_ft_vecpop.c47
-rw-r--r--test/src/vec/test_ft_vecpush.c57
17 files changed, 578 insertions, 2 deletions
diff --git a/Doxyfile b/Doxyfile
index 7b90753..64cc49b 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -275,7 +275,7 @@ TCL_SUBST =
# members will be omitted, etc.
# The default value is: NO.
-OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_FOR_C = YES
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
@@ -829,7 +829,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
-INPUT = src include
+INPUT = tmp
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/include/libft_vec.h b/include/libft_vec.h
new file mode 100644
index 0000000..62ec257
--- /dev/null
+++ b/include/libft_vec.h
@@ -0,0 +1,46 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* libft_vec.h :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 18:57:16 by charles #+# #+# */
+/* Updated: 2020/04/01 19:40:53 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef LIBFT_VEC_H
+# define LIBFT_VEC_H
+
+/*
+** \file libft_vec.h
+** \brief Vector manipulation
+*/
+
+# include <stdlib.h>
+# include <stddef.h>
+# include "libft_mem.h"
+
+/*
+** \brief Vector struct
+** \param data Underlying array
+** \param capacity Size of the underlying array
+** \param size Number of element in the vector
+*/
+
+typedef struct s_ftvec
+{
+ void **data;
+ size_t capacity;
+ size_t size;
+} t_ftvec;
+
+t_ftvec *ft_vecnew(size_t capacity);
+void ft_vecdestroy(t_ftvec *vec, void (*del)(void *elem));
+t_ftvec *ft_vecgrow(t_ftvec *vec);
+t_ftvec *ft_vecpush(t_ftvec *vec, void *pushed);
+void ft_vecpop(t_ftvec *vec, void (*del)(void *elem));
+void ft_veciter(t_ftvec *vec, void (*f)(void *elem));
+
+#endif
diff --git a/src/vec/ft_vecdestroy.c b/src/vec/ft_vecdestroy.c
new file mode 100644
index 0000000..781e02e
--- /dev/null
+++ b/src/vec/ft_vecdestroy.c
@@ -0,0 +1,29 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecdestroy.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:06:22 by charles #+# #+# */
+/* Updated: 2020/04/01 19:09:09 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Destroy a vector
+** \param vec Vector to destroy
+** \param del Delete function applied to each element of the vector
+*/
+
+void ft_vecdestroy(t_ftvec *vec, void (*del)(void *elem))
+{
+ if (vec == NULL)
+ return ;
+ if (del != NULL)
+ ft_veciter(vec, del);
+ free(vec->data);
+ free(vec);
+}
diff --git a/src/vec/ft_vecgrow.c b/src/vec/ft_vecgrow.c
new file mode 100644
index 0000000..bb8b8c7
--- /dev/null
+++ b/src/vec/ft_vecgrow.c
@@ -0,0 +1,43 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecgrow.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:13:07 by charles #+# #+# */
+/* Updated: 2020/04/01 21:15:20 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Vector Growth factor
+*/
+
+#define FT_VEC_GROWTH_FACTOR 1.5
+
+/*
+** \brief Grow the vector capacity by a constant factor
+** \param vec Vector to grow
+** \return Passed vector of NULL on error
+*/
+
+t_ftvec *ft_vecgrow(t_ftvec *vec)
+{
+ size_t new_capacity;
+ void **new_data;
+
+ if (vec->capacity <= 1)
+ new_capacity = 2;
+ else
+ new_capacity = vec->capacity * FT_VEC_GROWTH_FACTOR;
+ if ((new_data = (void**)malloc(sizeof(void*) * new_capacity)) == NULL)
+ return (NULL);
+ ft_memcpy(new_data, vec->data, vec->size);
+ free(vec->data);
+ vec->data = new_data;
+ vec->capacity = new_capacity;
+ return (vec);
+}
diff --git a/src/vec/ft_veciter.c b/src/vec/ft_veciter.c
new file mode 100644
index 0000000..ec4a917
--- /dev/null
+++ b/src/vec/ft_veciter.c
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_veciter.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:09:51 by charles #+# #+# */
+/* Updated: 2020/04/01 20:15:13 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Iterate a function over elements of a vector
+** \param vec Iterated vector
+** \param f Function applied to each elements
+*/
+
+void ft_veciter(t_ftvec *vec, void (*f)(void *elem))
+{
+ size_t i;
+
+ i = 0;
+ while (i < vec->size)
+ {
+ f(vec->data[i]);
+ i++;
+ }
+}
diff --git a/src/vec/ft_vecnew.c b/src/vec/ft_vecnew.c
new file mode 100644
index 0000000..8a8736a
--- /dev/null
+++ b/src/vec/ft_vecnew.c
@@ -0,0 +1,38 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecnew.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:03:49 by charles #+# #+# */
+/* Updated: 2020/04/01 20:00:00 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Create a new vector
+** \param capacity Initial capacity of the underlying array
+** Can't be lower than 1
+** \return Created vector or NULL on malloc error
+*/
+
+t_ftvec *ft_vecnew(size_t capacity)
+{
+ t_ftvec *vec;
+
+ if ((vec = (t_ftvec*)malloc(sizeof(t_ftvec))) == NULL)
+ return (NULL);
+ if (capacity == 0)
+ capacity = 1;
+ if ((vec->data = (void**)malloc(sizeof(void*) * capacity)) == NULL)
+ {
+ free(vec);
+ return (NULL);
+ }
+ vec->capacity = capacity;
+ vec->size = 0;
+ return (vec);
+}
diff --git a/src/vec/ft_vecpop.c b/src/vec/ft_vecpop.c
new file mode 100644
index 0000000..5b77b46
--- /dev/null
+++ b/src/vec/ft_vecpop.c
@@ -0,0 +1,28 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecpop.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:26:27 by charles #+# #+# */
+/* Updated: 2020/04/01 20:26:34 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Pop last element of a vector
+** \param vec Vector poped
+** \param del Delete function applied to last element
+*/
+
+void ft_vecpop(t_ftvec *vec, void (*del)(void *elem))
+{
+ if (vec->size == 0)
+ return ;
+ if (del != NULL)
+ del(vec->data[vec->size - 1]);
+ vec->size--;
+}
diff --git a/src/vec/ft_vecpush.c b/src/vec/ft_vecpush.c
new file mode 100644
index 0000000..fc903ef
--- /dev/null
+++ b/src/vec/ft_vecpush.c
@@ -0,0 +1,30 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecpush.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:22:20 by charles #+# #+# */
+/* Updated: 2020/04/01 20:20:06 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+/*
+** \brief Push element at the end of vector
+** \param vec Vector where element will be pushed
+** \param pushed Element to push
+** \return Passed vector or NULL if couldnt grow vector
+*/
+
+t_ftvec *ft_vecpush(t_ftvec *vec, void *pushed)
+{
+ if (vec->capacity <= vec->size)
+ if (ft_vecgrow(vec) == NULL)
+ return (NULL);
+ vec->data[vec->size] = pushed;
+ vec->size++;
+ return (vec);
+}
diff --git a/test/include/libft_test.h b/test/include/libft_test.h
index 1d944a5..efa15cd 100644
--- a/test/include/libft_test.h
+++ b/test/include/libft_test.h
@@ -18,7 +18,9 @@
# include "libft.h"
# include "libft_algo.h"
+# include "libft_lst.h"
# include "libft_ht.h"
+# include "libft_vec.h"
# include "helper/helper_segfault.h"
diff --git a/test/src/main.c b/test/src/main.c
index 42abe69..83e8d5f 100644
--- a/test/src/main.c
+++ b/test/src/main.c
@@ -68,6 +68,14 @@ static void run_all_test(void)
RUN_TEST_GROUP(ft_lstsize);
RUN_TEST_GROUP(ft_lstsort);
RUN_TEST_GROUP(ft_lstsorted_merge);
+
+ // vec
+ RUN_TEST_GROUP(ft_vecdestroy);
+ RUN_TEST_GROUP(ft_vecgrow);
+ RUN_TEST_GROUP(ft_veciter);
+ RUN_TEST_GROUP(ft_vecnew);
+ RUN_TEST_GROUP(ft_vecpop);
+ RUN_TEST_GROUP(ft_vecpush);
}
int main(int argc, const char **argv)
diff --git a/test/src/runner/test_runner_vec.c b/test/src/runner/test_runner_vec.c
new file mode 100644
index 0000000..af91360
--- /dev/null
+++ b/test/src/runner/test_runner_vec.c
@@ -0,0 +1,45 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_runner_vec.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:55:53 by charles #+# #+# */
+/* Updated: 2020/04/01 19:58:25 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+
+#include "libft_test.h"
+
+TEST_GROUP_RUNNER(ft_vecdestroy)
+{
+ RUN_TEST_CASE(ft_vecdestroy, basic);
+}
+
+TEST_GROUP_RUNNER(ft_vecgrow)
+{
+ RUN_TEST_CASE(ft_vecgrow, basic);
+}
+
+TEST_GROUP_RUNNER(ft_veciter)
+{
+ RUN_TEST_CASE(ft_veciter, basic);
+}
+
+TEST_GROUP_RUNNER(ft_vecnew)
+{
+ RUN_TEST_CASE(ft_vecnew, basic);
+}
+
+TEST_GROUP_RUNNER(ft_vecpop)
+{
+ RUN_TEST_CASE(ft_vecpop, basic);
+}
+
+TEST_GROUP_RUNNER(ft_vecpush)
+{
+ RUN_TEST_CASE(ft_vecpush, basic);
+}
+
diff --git a/test/src/vec/test_ft_vecdestroy.c b/test/src/vec/test_ft_vecdestroy.c
new file mode 100644
index 0000000..4f121dc
--- /dev/null
+++ b/test/src/vec/test_ft_vecdestroy.c
@@ -0,0 +1,26 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_vecdestroy.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 19:55:14 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_vecdestroy);
+
+TEST_SETUP(ft_vecdestroy)
+{}
+
+TEST_TEAR_DOWN(ft_vecdestroy)
+{}
+
+TEST(ft_vecdestroy, basic)
+{
+ TEST_PASS();
+}
diff --git a/test/src/vec/test_ft_vecgrow.c b/test/src/vec/test_ft_vecgrow.c
new file mode 100644
index 0000000..0b40390
--- /dev/null
+++ b/test/src/vec/test_ft_vecgrow.c
@@ -0,0 +1,47 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_vecgrow.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 21:17:13 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_vecgrow);
+
+TEST_SETUP(ft_vecgrow)
+{}
+
+TEST_TEAR_DOWN(ft_vecgrow)
+{}
+
+TEST(ft_vecgrow, basic)
+{
+ t_ftvec *vec = ft_vecnew(1);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(2, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(3, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(4, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(6, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(9, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_NOT_NULL(ft_vecgrow(vec));
+ TEST_ASSERT_EQUAL(13, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+
+ ft_vecdestroy(vec, NULL);
+}
diff --git a/test/src/vec/test_ft_veciter.c b/test/src/vec/test_ft_veciter.c
new file mode 100644
index 0000000..fac28c1
--- /dev/null
+++ b/test/src/vec/test_ft_veciter.c
@@ -0,0 +1,52 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_veciter.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 20:20:41 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_veciter);
+
+TEST_SETUP(ft_veciter)
+{}
+
+TEST_TEAR_DOWN(ft_veciter)
+{}
+
+static void iter_func(void *x)
+{
+ *(int*)x = *(int*)x * *(int*)x;
+}
+
+static void iter_func2(void *x)
+{
+ *(int*)x = *(int*)x - 100;
+}
+
+TEST(ft_veciter, basic)
+{
+ int tmp[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+ t_ftvec *vec;
+
+ vec = ft_vecnew(10);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+ for (int i = 0; i < 10; i++)
+ vec->data[i] = tmp + i;
+ vec->size = 10;
+ ft_veciter(vec, iter_func);
+ for (int i = 0; i < 10; i++)
+ TEST_ASSERT_EQUAL(i * i, *(int*)vec->data[i]);
+ ft_veciter(vec, iter_func2);
+ for (int i = 0; i < 10; i++)
+ TEST_ASSERT_EQUAL(i * i - 100, *(int*)vec->data[i]);
+
+ ft_vecdestroy(vec, NULL);
+}
diff --git a/test/src/vec/test_ft_vecnew.c b/test/src/vec/test_ft_vecnew.c
new file mode 100644
index 0000000..579a182
--- /dev/null
+++ b/test/src/vec/test_ft_vecnew.c
@@ -0,0 +1,47 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_vecnew.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 20:01:37 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_vecnew);
+
+TEST_SETUP(ft_vecnew)
+{}
+
+TEST_TEAR_DOWN(ft_vecnew)
+{}
+
+TEST(ft_vecnew, basic)
+{
+ t_ftvec *vec;
+
+ vec = ft_vecnew(0);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+ TEST_ASSERT_EQUAL(1, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ ft_vecdestroy(vec, NULL);
+
+ vec = ft_vecnew(10);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+ TEST_ASSERT_EQUAL(10, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ ft_vecdestroy(vec, NULL);
+
+ vec = ft_vecnew(256);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+ TEST_ASSERT_EQUAL(256, vec->capacity);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ ft_vecdestroy(vec, NULL);
+}
diff --git a/test/src/vec/test_ft_vecpop.c b/test/src/vec/test_ft_vecpop.c
new file mode 100644
index 0000000..2ee96d2
--- /dev/null
+++ b/test/src/vec/test_ft_vecpop.c
@@ -0,0 +1,47 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_vecpop.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 20:26:37 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_vecpop);
+
+TEST_SETUP(ft_vecpop)
+{}
+
+TEST_TEAR_DOWN(ft_vecpop)
+{}
+
+TEST(ft_vecpop, basic)
+{
+ t_ftvec *vec;
+
+ vec = ft_vecnew(3);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+
+ vec->size = 3;
+ for (long i = 0; i < 3; i++)
+ vec->data[i] = (void*)i;
+
+ ft_vecpop(vec, NULL);
+ TEST_ASSERT_EQUAL(2, vec->size);
+ TEST_ASSERT_EQUAL(3, vec->capacity);
+ ft_vecpop(vec, NULL);
+ TEST_ASSERT_EQUAL(1, vec->size);
+ TEST_ASSERT_EQUAL(3, vec->capacity);
+ ft_vecpop(vec, NULL);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_EQUAL(3, vec->capacity);
+ ft_vecpop(vec, NULL);
+ TEST_ASSERT_EQUAL(0, vec->size);
+ TEST_ASSERT_EQUAL(3, vec->capacity);
+}
diff --git a/test/src/vec/test_ft_vecpush.c b/test/src/vec/test_ft_vecpush.c
new file mode 100644
index 0000000..05efc7a
--- /dev/null
+++ b/test/src/vec/test_ft_vecpush.c
@@ -0,0 +1,57 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* test_ft_vecpush.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/01 19:41:59 by charles #+# #+# */
+/* Updated: 2020/04/01 20:23:00 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_test.h"
+
+TEST_GROUP(ft_vecpush);
+
+TEST_SETUP(ft_vecpush)
+{}
+
+TEST_TEAR_DOWN(ft_vecpush)
+{}
+
+TEST(ft_vecpush, basic)
+{
+ t_ftvec *vec;
+
+ vec = ft_vecnew(2);
+ TEST_ASSERT_NOT_NULL(vec);
+ TEST_ASSERT_NOT_NULL(vec->data);
+
+ TEST_ASSERT_NOT_NULL(ft_vecpush(vec, (void*)10));
+ TEST_ASSERT_EQUAL(1, vec->size);
+ TEST_ASSERT_EQUAL(2, vec->capacity);
+ TEST_ASSERT_EQUAL(10, (long)vec->data[0]);
+
+ TEST_ASSERT_NOT_NULL(ft_vecpush(vec, (void*)11));
+ TEST_ASSERT_EQUAL(2, vec->size);
+ TEST_ASSERT_EQUAL(2, vec->capacity);
+ TEST_ASSERT_EQUAL(11, (long)vec->data[1]);
+
+ TEST_ASSERT_NOT_NULL(ft_vecpush(vec, (void*)12));
+ TEST_ASSERT_EQUAL(3, vec->size);
+ TEST_ASSERT_EQUAL(2 * 1.5, vec->capacity);
+ TEST_ASSERT_EQUAL(12, (long)vec->data[2]);
+
+ TEST_ASSERT_NOT_NULL(ft_vecpush(vec, (void*)13));
+ TEST_ASSERT_EQUAL(4, vec->size);
+ TEST_ASSERT_EQUAL(2 * 1.5 * 1.5, vec->capacity);
+ TEST_ASSERT_EQUAL(13, (long)vec->data[3]);
+
+ TEST_ASSERT_NOT_NULL(ft_vecpush(vec, (void*)14));
+ TEST_ASSERT_EQUAL(5, vec->size);
+ TEST_ASSERT_EQUAL(2 * 1.5 * 1.5 * 1.5, vec->capacity);
+ TEST_ASSERT_EQUAL(14, (long)vec->data[4]);
+
+ ft_vecdestroy(vec, NULL);
+}