From 944a236443bacf531085b346d06907b24e3739b1 Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 5 Apr 2020 01:11:50 +0200 Subject: Added ft_dstrerase, ft_dstrsubstitute --- include/libft_dstr.h | 5 ++- src/dstr/ft_dstrerase.c | 35 +++++++++++++++++ src/dstr/ft_dstrsubstitute.c | 32 ++++++++++++++++ test/src/dstr/test_ft_dstrerase.c | 69 ++++++++++++++++++++++++++++++++++ test/src/dstr/test_ft_dstrsubstitute.c | 64 +++++++++++++++++++++++++++++++ test/src/main.c | 2 + test/src/runner/test_runner_dstr.c | 12 +++++- 7 files changed, 216 insertions(+), 3 deletions(-) create mode 100644 src/dstr/ft_dstrerase.c create mode 100644 src/dstr/ft_dstrsubstitute.c create mode 100644 test/src/dstr/test_ft_dstrerase.c create mode 100644 test/src/dstr/test_ft_dstrsubstitute.c 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); +} -- cgit