diff options
| -rw-r--r-- | include/libft_dstr.h | 5 | ||||
| -rw-r--r-- | src/dstr/ft_dstrerase.c | 35 | ||||
| -rw-r--r-- | src/dstr/ft_dstrsubstitute.c | 32 | ||||
| -rw-r--r-- | test/src/dstr/test_ft_dstrerase.c | 69 | ||||
| -rw-r--r-- | test/src/dstr/test_ft_dstrsubstitute.c | 64 | ||||
| -rw-r--r-- | test/src/main.c | 2 | ||||
| -rw-r--r-- | test/src/runner/test_runner_dstr.c | 12 |
7 files changed, 216 insertions, 3 deletions
diff --git a/include/libft_dstr.h b/include/libft_dstr.h index fbe69db..732e475 100644 --- a/include/libft_dstr.h +++ b/include/libft_dstr.h @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/03 10:39:51 by charles #+# #+# */ -/* Updated: 2020/04/04 23:33:27 by charles ### ########.fr */ +/* Updated: 2020/04/05 00:37:05 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,8 @@ void ft_dstrdestroy(t_ftdstr *dstr); t_ftdstr *ft_dstrgrow(t_ftdstr *dstr, size_t at_least); char *ft_dstrunwrap(t_ftdstr *dstr); t_ftdstr *ft_dstrinsert(t_ftdstr *dstr, char *inserted, size_t i); -t_ftdstr *ft_dstrsubstitute(t_ftdstr *dstr, char *sub, +void ft_dstrerase(t_ftdstr *dstr, size_t start, size_t len); +t_ftdstr *ft_dstrsubstitute(t_ftdstr *dstr, char *replacement, size_t start, size_t end); #endif diff --git a/src/dstr/ft_dstrerase.c b/src/dstr/ft_dstrerase.c new file mode 100644 index 0000000..3d4732b --- /dev/null +++ b/src/dstr/ft_dstrerase.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dstrerase.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/05 00:39:12 by charles #+# #+# */ +/* Updated: 2020/04/05 01:11:07 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_dstr.h" + +/* +** \brief Erase part of a dynamic string +** \param dstr Dynamic string to erase from +** \param start Erase starting index +** \param len Number of character to erase +*/ + +void ft_dstrerase(t_ftdstr *dstr, size_t start, size_t len) +{ + if (start > dstr->length) + return ; + if (start + len > dstr->length) + len = dstr->length - start; + ft_memmove( + dstr->str + start, + dstr->str + start + len, + dstr->length - start - len + ); + dstr->length -= len; + dstr->str[dstr->length] = '\0'; +} diff --git a/src/dstr/ft_dstrsubstitute.c b/src/dstr/ft_dstrsubstitute.c new file mode 100644 index 0000000..84adc29 --- /dev/null +++ b/src/dstr/ft_dstrsubstitute.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dstrsubstitute.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/05 00:22:55 by charles #+# #+# */ +/* Updated: 2020/04/05 00:38:40 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_dstr.h" + +/* +** \brief Substitute part of a dynamic string for an other string +** \param dstr Dynamic string to substitute in +** \param replacement Replacement text +** \param start Substitution start index +** \param len Substitution length +*/ + +t_ftdstr *ft_dstrsubstitute( + t_ftdstr *dstr, + char *replacement, + size_t start, + size_t len +) +{ + ft_dstrerase(dstr, start, len); + return (ft_dstrinsert(dstr, replacement, start)); +} diff --git a/test/src/dstr/test_ft_dstrerase.c b/test/src/dstr/test_ft_dstrerase.c new file mode 100644 index 0000000..01ed560 --- /dev/null +++ b/test/src/dstr/test_ft_dstrerase.c @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* test_ft_dstrerase.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/01 19:41:59 by charles #+# #+# */ +/* Updated: 2020/04/05 01:02:40 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_test.h" + +TEST_GROUP(ft_dstrerase); + +TEST_SETUP(ft_dstrerase) +{} + +TEST_TEAR_DOWN(ft_dstrerase) +{} + +TEST(ft_dstrerase, basic) +{ + t_ftdstr *dstr; + + dstr = ft_dstrnew("bonjour"); + ft_dstrerase(dstr, 0, 0); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(7, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("bonjour", dstr->str); + + ft_dstrerase(dstr, 2, 0); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(7, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("bonjour", dstr->str); + + ft_dstrerase(dstr, 2, 1); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(6, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("bojour", dstr->str); + + ft_dstrerase(dstr, 6, 1); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(6, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("bojour", dstr->str); + + ft_dstrerase(dstr, 5, 1); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(5, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("bojou", dstr->str); + + ft_dstrerase(dstr, 0, 2); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(3, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("jou", dstr->str); + + ft_dstrerase(dstr, 0, 10); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_EQUAL(0, dstr->length); + TEST_ASSERT_EQUAL(8, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("", dstr->str); +} diff --git a/test/src/dstr/test_ft_dstrsubstitute.c b/test/src/dstr/test_ft_dstrsubstitute.c new file mode 100644 index 0000000..d81b944 --- /dev/null +++ b/test/src/dstr/test_ft_dstrsubstitute.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* test_ft_dstrsubstitute.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/01 19:41:59 by charles #+# #+# */ +/* Updated: 2020/04/05 01:09:47 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_test.h" + +TEST_GROUP(ft_dstrsubstitute); + +TEST_SETUP(ft_dstrsubstitute) +{} + +TEST_TEAR_DOWN(ft_dstrsubstitute) +{} + +TEST(ft_dstrsubstitute, basic) +{ + t_ftdstr *dstr; + + dstr = ft_dstrnew("bonjour"); + TEST_ASSERT_NULL(ft_dstrsubstitute(dstr, "bonjour", 8, 1)); + + TEST_ASSERT_NOT_NULL(ft_dstrsubstitute(dstr, "{{{", 0, 0)); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_NOT_NULL(dstr->str); + TEST_ASSERT_EQUAL(10, dstr->length); + TEST_ASSERT_GREATER_OR_EQUAL(11, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("{{{bonjour", dstr->str); + + TEST_ASSERT_NOT_NULL(ft_dstrsubstitute(dstr, "]]]", dstr->length, 0)); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_NOT_NULL(dstr->str); + TEST_ASSERT_EQUAL(13, dstr->length); + TEST_ASSERT_GREATER_OR_EQUAL(14, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("{{{bonjour]]]", dstr->str); + + TEST_ASSERT_NOT_NULL(ft_dstrsubstitute(dstr, "aurevoir", 3, 7)); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_NOT_NULL(dstr->str); + TEST_ASSERT_EQUAL(14, dstr->length); + TEST_ASSERT_GREATER_OR_EQUAL(15, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("{{{aurevoir]]]", dstr->str); + + TEST_ASSERT_NOT_NULL(ft_dstrsubstitute(dstr, "<>", 0, dstr->length)); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_NOT_NULL(dstr->str); + TEST_ASSERT_EQUAL(2, dstr->length); + TEST_ASSERT_GREATER_OR_EQUAL(3, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("<>", dstr->str); + + TEST_ASSERT_NOT_NULL(ft_dstrsubstitute(dstr, "<>", 0, dstr->length)); + TEST_ASSERT_NOT_NULL(dstr); + TEST_ASSERT_NOT_NULL(dstr->str); + TEST_ASSERT_EQUAL(2, dstr->length); + TEST_ASSERT_GREATER_OR_EQUAL(3, dstr->capacity); + TEST_ASSERT_EQUAL_STRING("<>", dstr->str); +} diff --git a/test/src/main.c b/test/src/main.c index b8f5cf3..ea2865b 100644 --- a/test/src/main.c +++ b/test/src/main.c @@ -89,6 +89,8 @@ static void run_all_test(void) RUN_TEST_GROUP(ft_dstrinsert); RUN_TEST_GROUP(ft_dstrnew); RUN_TEST_GROUP(ft_dstrunwrap); + RUN_TEST_GROUP(ft_dstrsubstitute); + RUN_TEST_GROUP(ft_dstrerase); } diff --git a/test/src/runner/test_runner_dstr.c b/test/src/runner/test_runner_dstr.c index 0c20048..a6d9bdd 100644 --- a/test/src/runner/test_runner_dstr.c +++ b/test/src/runner/test_runner_dstr.c @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/04 20:44:42 by charles #+# #+# */ -/* Updated: 2020/04/04 20:47:33 by charles ### ########.fr */ +/* Updated: 2020/04/05 00:48:08 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,3 +36,13 @@ TEST_GROUP_RUNNER(ft_dstrunwrap) { RUN_TEST_CASE(ft_dstrunwrap, basic); } + +TEST_GROUP_RUNNER(ft_dstrsubstitute) +{ + RUN_TEST_CASE(ft_dstrsubstitute, basic); +} + +TEST_GROUP_RUNNER(ft_dstrerase) +{ + RUN_TEST_CASE(ft_dstrerase, basic); +} |
