summaryrefslogtreecommitdiff
path: root/src/range/slice_test.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2014-03-30 23:14:12 -0700
committerBen Longbons <b.r.longbons@gmail.com>2014-03-31 10:18:49 -0700
commit1a651243bb2c8e18baa9aac30ac52a62185074e7 (patch)
treedd2c0bfc448faef129fb64edec9f64d2ab12bfe5 /src/range/slice_test.cpp
parent769e8ac9c17779a15492d7fcfc1931c014670c2d (diff)
downloadtmwa-1a651243bb2c8e18baa9aac30ac52a62185074e7.tar.gz
tmwa-1a651243bb2c8e18baa9aac30ac52a62185074e7.tar.bz2
tmwa-1a651243bb2c8e18baa9aac30ac52a62185074e7.tar.xz
tmwa-1a651243bb2c8e18baa9aac30ac52a62185074e7.zip
Be stricter about most arrays
Diffstat (limited to 'src/range/slice_test.cpp')
-rw-r--r--src/range/slice_test.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/range/slice_test.cpp b/src/range/slice_test.cpp
new file mode 100644
index 0000000..5bd2748
--- /dev/null
+++ b/src/range/slice_test.cpp
@@ -0,0 +1,89 @@
+#include "slice.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(slice, slice)
+{
+ int init[] = {1, 2, 3, 4, 5};
+
+ Slice<int> slice(std::begin(init), std::end(init));
+ EXPECT_EQ(slice.data(), init);
+ EXPECT_EQ(slice.size(), 5);
+
+ Slice<int> head = slice.slice_h(2);
+ Slice<int> tail = slice.slice_t(2);
+ EXPECT_EQ(head.size(), 2);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(head.front(), 1);
+ EXPECT_EQ(head.back(), 2);
+ EXPECT_EQ(tail.front(), 3);
+ EXPECT_EQ(tail.back(), 5);
+
+ head = slice.rslice_h(3);
+ tail = slice.rslice_t(3);
+ EXPECT_EQ(head.size(), 2);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(head.front(), 1);
+ EXPECT_EQ(head.back(), 2);
+ EXPECT_EQ(tail.front(), 3);
+ EXPECT_EQ(tail.back(), 5);
+
+ head = slice.islice_h(slice.begin() + 2);
+ tail = slice.islice_t(slice.end() - 3);
+ EXPECT_EQ(head.size(), 2);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(head.front(), 1);
+ EXPECT_EQ(head.back(), 2);
+ EXPECT_EQ(tail.front(), 3);
+ EXPECT_EQ(tail.back(), 5);
+
+ tail = slice.lslice(1, 3);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(tail.front(), 2);
+ EXPECT_EQ(tail.back(), 4);
+
+ tail = slice.pslice(1, 4);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(tail.front(), 2);
+ EXPECT_EQ(tail.back(), 4);
+
+ tail = slice.islice(slice.begin() + 1, slice.end() - 1);
+ EXPECT_EQ(tail.size(), 3);
+ EXPECT_EQ(tail.front(), 2);
+ EXPECT_EQ(tail.back(), 4);
+
+ head = slice;
+ while (head)
+ {
+ size_t headsize = head.size();
+ EXPECT_EQ(head.back(), headsize);
+ EXPECT_EQ(head.pop_back(), headsize);
+ }
+
+ tail = slice;
+ while (!!tail)
+ {
+ size_t tailsize = tail.size();
+ EXPECT_EQ(tail.front(), 6 - tailsize);
+ EXPECT_EQ(tail.pop_front(), 6 - tailsize);
+ }
+}
+
+TEST(slice, cast)
+{
+ struct Foo
+ {
+ int x;
+ };
+ struct Bar : Foo
+ {
+ };
+
+ Bar bars[2] = {Bar(), Bar()};
+
+ Slice<Bar> slice(bars, 2);
+ Slice<Foo> foos(slice);
+
+ EXPECT_EQ(foos.size(), slice.size());
+ EXPECT_EQ(&foos.end()[-1], &slice.end()[-1]);
+}