diff options
author | Johnny Richard <johnny@johnnyrichard.com> | 2022-04-18 00:59:18 +0200 |
---|---|---|
committer | Johnny Richard <johnny@johnnyrichard.com> | 2022-04-18 00:59:18 +0200 |
commit | d3bdadd76b59770c9402db1f2475cf760f8f682b (patch) | |
tree | 5318ef2324ed55a9d359e62d32a55396ca6560ca | |
parent | 7d5b3c1e9ae35cc2f33c05c1f24f8c9a262eb618 (diff) |
string_view: Implement string_view_to_cstr
-rw-r--r-- | string_view.c | 7 | ||||
-rw-r--r-- | string_view.h | 15 | ||||
-rw-r--r-- | test/string_view_test.c | 17 |
3 files changed, 26 insertions, 13 deletions
diff --git a/string_view.c b/string_view.c index d730627..4de1a98 100644 --- a/string_view.c +++ b/string_view.c @@ -19,6 +19,7 @@ #include <assert.h> #include <stdbool.h> +#include <stdio.h> #include <string.h> string_view_t @@ -39,6 +40,12 @@ string_view_from_cstr(const char *cstr) } bool +string_view_to_cstr(string_view_t *sv, char *ret) +{ + return sprintf(ret, "%.*s", sv->size, sv->data) < 0; +} + +bool string_view_eq(string_view_t a, string_view_t b) { return a.size == b.size && memcmp(a.data, b.data, a.size) == 0; diff --git a/string_view.h b/string_view.h index 2ac6684..413cb24 100644 --- a/string_view.h +++ b/string_view.h @@ -32,21 +32,10 @@ string_view_t string_view_new(const char *cstr, size_t size); string_view_t string_view_from_cstr(const char *cstr); +bool string_view_to_cstr(string_view_t *sv, char *ret); + bool string_view_eq(string_view_t a, string_view_t b); string_view_t string_view_chop_by_delim(string_view_t *sv, char delim); -/* -bool string_view_index_of(string_view_t sv, char c, size_t *index); - - -bool string_view_eqi(string_view_t a, string_view_t b); - -bool string_view_starts_with(string_view_t sv, string_view_t prefix); - -bool string_view_ends_with(string_view_t sv, string_view_t suffix); - -uint64_t string_view_to_u64(string_view_t sv); -*/ - #endif /* STRING_VIEW_H */ diff --git a/test/string_view_test.c b/test/string_view_test.c index a050239..7b2400c 100644 --- a/test/string_view_test.c +++ b/test/string_view_test.c @@ -49,6 +49,22 @@ test_from_cstr(const MunitParameter params[], } static MunitResult +test_to_cstr(const MunitParameter params[], + void *user_data_or_fixture) +{ + char *cstr = "hello world"; + + string_view_t sv = string_view_new(cstr, 5); + + char actual[sv.size + 1]; + string_view_to_cstr(&sv, actual); + + assert_string_equal(actual, "hello"); + + return MUNIT_OK; +} + +static MunitResult test_eq(const MunitParameter params[], void *user_data_or_fixture) { @@ -101,6 +117,7 @@ test_chop_by_delim_when_has_no_delim(const MunitParameter params[], static MunitTest tests[] = { { "/test_create_new", test_create_new, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, { "/test_from_cstr", test_from_cstr, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, + { "/test_to_cstr", test_to_cstr, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, { "/test_eq", test_eq, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, { "/test_chop_by_delim_when_has_delim", test_chop_by_delim_when_has_delim, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, { "/test_chop_by_delim_when_has_no_delim", test_chop_by_delim_when_has_no_delim, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, |