From 94c01870418373c93744b73d29ebc74986cedd5c Mon Sep 17 00:00:00 2001 From: Mitya Selivanov Date: Fri, 15 Sep 2023 22:09:46 +0200 Subject: file mapping --- source/tests/file.test.c | 76 ++++++++++++++++++++++++++++++++++++---- source/tests/test_interprocess.c | 2 ++ 2 files changed, 71 insertions(+), 7 deletions(-) (limited to 'source/tests') diff --git a/source/tests/file.test.c b/source/tests/file.test.c index e6071a1..2a37c07 100644 --- a/source/tests/file.test.c +++ b/source/tests/file.test.c @@ -1,6 +1,5 @@ #include "../kit/file.h" #include "../kit/string_ref.h" -#include #define KIT_TEST_FILE file #include "../kit/kit_test.h" @@ -205,16 +204,79 @@ TEST("file path take windows disk name") { REQUIRE(AR_EQUAL(path_take(foobar, 2), bar)); } -TEST("file create folder") { } +TEST("file create folder") { + str_t folder_name = SZ("test_folder"); -TEST("file create folder recursive") { } + REQUIRE_EQ(folder_create(folder_name), KIT_OK); + REQUIRE_EQ(path_type(folder_name), PATH_FOLDER); + REQUIRE_EQ(folder_remove(folder_name), KIT_OK); + REQUIRE_EQ(path_type(folder_name), PATH_NONE); +} + +TEST("file create folder recursive") { + REQUIRE_EQ(folder_create_recursive( + SZ("test_folder" PATH_DELIM "foo" PATH_DELIM "bar")), + KIT_OK); + REQUIRE_EQ(path_type(SZ("test_folder")), PATH_FOLDER); + REQUIRE_EQ(path_type(SZ("test_folder" PATH_DELIM "foo")), + PATH_FOLDER); + REQUIRE_EQ( + path_type(SZ("test_folder" PATH_DELIM "foo" PATH_DELIM "bar")), + PATH_FOLDER); + REQUIRE_EQ(file_remove_recursive(SZ("test_folder"), NULL), KIT_OK); + REQUIRE_EQ(path_type(SZ("test_folder")), PATH_NONE); +} + +TEST("file remove") { + FILE *f = fopen("test_file", "wb"); + fclose(f); + + REQUIRE_EQ(path_type(SZ("test_file")), PATH_FILE); + REQUIRE_EQ(file_remove(SZ("test_file")), KIT_OK); + REQUIRE_EQ(path_type(SZ("test_file")), PATH_NONE); + REQUIRE_EQ(file_remove(SZ("unexisted_file_foo_bar")), + KIT_ERROR_UNLINK_FAILED); +} + +TEST("file map read") { + char buf[] = "bar"; -TEST("file remove") { } + FILE *f = fopen("foo", "wb"); + fwrite(buf, 1, 3, f); + fclose(f); -TEST("file remove folder") { } + mapped_file_t mf = file_map(SZ("foo"), 3, FILE_MAP_PRIVATE); -TEST("file remove recursive") { } + REQUIRE_EQ(mf.status, KIT_OK); + if (mf.status == KIT_OK) { + REQUIRE_EQ(memcmp(buf, mf.bytes, 3), 0); + file_unmap(&mf); + } -TEST("file enum folder") { } + file_remove(SZ("foo")); +} + +TEST("file map write") { + mapped_file_t mf = file_map(SZ("foo"), 3, FILE_MAP_SHARED); + + REQUIRE_EQ(mf.status, KIT_OK); + if (mf.status == KIT_OK) { + memcpy(mf.bytes, "bar", 3); + file_unmap(&mf); + + char buf[3]; + FILE *f = fopen("foo", "rb"); + i64 n = (i64) fread(buf, 1, 3, f); + REQUIRE_EQ(n, 3); + fclose(f); + + if (n == 3) { + printf("READ: %d %d %d \n", buf[0], buf[1], buf[2]); + REQUIRE_EQ(memcmp(buf, "bar", 3), 0); + } + + file_remove(SZ("foo")); + } +} #undef KIT_TEST_FILE diff --git a/source/tests/test_interprocess.c b/source/tests/test_interprocess.c index a69dd02..cf33086 100644 --- a/source/tests/test_interprocess.c +++ b/source/tests/test_interprocess.c @@ -10,6 +10,8 @@ enum { DATA_SIZE = 64 }; enum { STATE_INIT, STATE_READY, STATE_DONE }; int run_writer() { + kit_shared_memory_clean(SZ(NAME)); + kit_shared_memory_t mem = kit_shared_memory_open( SZ(NAME), DATA_SIZE, KIT_SHARED_MEMORY_CREATE); -- cgit v1.2.3