From 32e14551a90e85000e41b3f0445d34d58a1431e4 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Wed, 10 Sep 2025 22:12:22 +0200 Subject: Add unicode general category lookup Generate the lookup tables from UnicodeData.txt, do to that, add gen_ugc, which uses csv, buffers, line, io and other modules to do the job. --- test/csv.cc | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 test/csv.cc (limited to 'test/csv.cc') diff --git a/test/csv.cc b/test/csv.cc new file mode 100644 index 0000000..49fe540 --- /dev/null +++ b/test/csv.cc @@ -0,0 +1,90 @@ +#include + +#include "csv.hh" + +TEST(csv, empty) { + auto csv = csv::open(io::memory("")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); +} + +TEST(csv, one_value) { + auto csv = csv::open(io::memory("foo")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(1, line.value().size()); + EXPECT_EQ("foo", line.value()[0]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); +} + +TEST(csv, two_value) { + auto csv = csv::open(io::memory("foo,bar")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(2, line.value().size()); + EXPECT_EQ("foo", line.value()[0]); + EXPECT_EQ("bar", line.value()[1]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); +} + +TEST(csv, empty_value) { + auto csv = csv::open(io::memory("foo,,bar,")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(4, line.value().size()); + EXPECT_EQ("foo", line.value()[0]); + EXPECT_EQ("", line.value()[1]); + EXPECT_EQ("bar", line.value()[2]); + EXPECT_EQ("", line.value()[3]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); +} + +TEST(csv, many_lines) { + auto csv = csv::open(io::memory("foo,bar\nfoobar\nf,o,o,")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(2, line.value().size()); + EXPECT_EQ("foo", line.value()[0]); + EXPECT_EQ("bar", line.value()[1]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(1, line.value().size()); + EXPECT_EQ("foobar", line.value()[0]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(4, line.value().size()); + EXPECT_EQ("f", line.value()[0]); + EXPECT_EQ("o", line.value()[1]); + EXPECT_EQ("o", line.value()[2]); + EXPECT_EQ("", line.value()[3]); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); +} + +TEST(csv, blank_lines) { + auto csv = csv::open(io::memory("foo,bar\n\nbar,foo\n\n")); + auto line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(2, line.value().size()); + EXPECT_EQ("foo", line.value()[0]); + EXPECT_EQ("bar", line.value()[1]); + EXPECT_EQ(1, csv->number()); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + ASSERT_EQ(2, line.value().size()); + EXPECT_EQ("bar", line.value()[0]); + EXPECT_EQ("foo", line.value()[1]); + EXPECT_EQ(3, csv->number()); + line = csv->read(); + ASSERT_TRUE(line.has_value()); + EXPECT_EQ(0, line.value().size()); + EXPECT_EQ(4, csv->number()); +} -- cgit v1.3