Add files for swift over UDP.
[swifty.git] / src / libswift_udp / tests / bin64test.cpp
diff --git a/src/libswift_udp/tests/bin64test.cpp b/src/libswift_udp/tests/bin64test.cpp
new file mode 100644 (file)
index 0000000..77340f0
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ *  bintest.cpp
+ *  bin++
+ *
+ *  Created by Victor Grishchenko on 3/9/09.
+ *  Copyright 2009-2012 TECHNISCHE UNIVERSITEIT DELFT. All rights reserved.
+ *
+ */
+#include "bin.h"
+#include "bin_utils.h"
+#include <gtest/gtest.h>
+
+TEST(Bin64Test,InitGet) {
+
+    EXPECT_EQ(0x1,bin_t(1,0).toUInt());
+    EXPECT_EQ(0xB,bin_t(2,1).toUInt());
+    EXPECT_EQ(0x2,bin_t(2,1).layer());
+    EXPECT_EQ(34,bin_t(34,2345).layer());
+    EXPECT_EQ(0x7ffffffffULL,bin_t(34,2345).layer_bits());
+    EXPECT_EQ(1,bin_t(2,1).layer_offset());
+    EXPECT_EQ(2345,bin_t(34,2345).layer_offset());
+    EXPECT_EQ((1<<1) - 1,bin_t(0,123).layer_bits());
+    EXPECT_EQ((1<<17) - 1,bin_t(16,123).layer_bits());
+
+}
+
+TEST(Bin64Test,Navigation) {
+
+    bin_t mid(4,18);
+    EXPECT_EQ(bin_t(5,9),mid.parent());
+    EXPECT_EQ(bin_t(3,36),mid.left());
+    EXPECT_EQ(bin_t(3,37),mid.right());
+    EXPECT_EQ(bin_t(5,9),bin_t(4,19).parent());
+    bin_t up32(30,1);
+    EXPECT_EQ(bin_t(31,0),up32.parent());
+
+}
+
+TEST(Bin64Test,Overflows) {
+
+    EXPECT_FALSE(bin_t::NONE.contains(bin_t(0,1)));
+    EXPECT_TRUE(bin_t::ALL.contains(bin_t(0,1)));
+    EXPECT_EQ(0,bin_t::NONE.base_length());
+    EXPECT_EQ(bin_t::NONE,bin_t::NONE.twisted(123));
+    /*EXPECT_EQ(bin64_t::NONE.parent(),bin64_t::NONE);
+    EXPECT_EQ(bin64_t::NONE.left(),bin64_t::NONE);
+    EXPECT_EQ(bin64_t::NONE.right(),bin64_t::NONE);
+    EXPECT_EQ(bin64_t::NONE,bin64_t(0,2345).left());
+    EXPECT_EQ(bin64_t::NONE,bin64_t::ALL.parent());
+*/
+}
+
+TEST(Bin64Test, Advanced) {
+
+    EXPECT_EQ(4,bin_t(2,3).base_length());
+    EXPECT_FALSE(bin_t(1,1234).is_base());
+    EXPECT_TRUE(bin_t(0,12345).is_base());
+    EXPECT_EQ(bin_t(0,2),bin_t(1,1).base_left());
+    bin_t peaks[64];
+    int peak_count = gen_peaks(7,peaks);
+    EXPECT_EQ(3,peak_count);
+    EXPECT_EQ(bin_t(2,0),peaks[0]);
+    EXPECT_EQ(bin_t(1,2),peaks[1]);
+    EXPECT_EQ(bin_t(0,6),peaks[2]);
+
+}
+
+TEST(Bin64Test, Bits) {
+    bin_t all = bin_t::ALL, none = bin_t::NONE, big = bin_t(40,18);
+    uint32_t a32 = bin_toUInt32(all), n32 = bin_toUInt32(none), b32 = bin_toUInt32(big);
+    EXPECT_EQ(0x7fffffff,a32);
+    EXPECT_EQ(0xffffffff,n32);
+    EXPECT_EQ(bin_t::NONE,bin_fromUInt32(b32));
+}
+
+int main (int argc, char** argv) {
+
+       testing::InitGoogleTest(&argc, argv);
+       return RUN_ALL_TESTS();
+
+}