1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
6 #include "common/SloppyCRCMap.h"
7 #include "common/Formatter.h"
8 #include <gtest/gtest.h>
12 void dump(const SloppyCRCMap& scm)
14 Formatter *f = Formatter::create("json-pretty");
15 f->open_object_section("map");
22 TEST(SloppyCRCMap, basic) {
26 a.append("The quick brown fox jumped over a fence whose color I forget.");
29 scm.write(0, a.length(), a);
32 ASSERT_EQ(0, scm.read(0, a.length(), a, &cout));
34 scm.write(12, b.length(), b);
38 ASSERT_EQ(0, scm.read(12, b.length(), b, &cout));
39 ASSERT_EQ(1, scm.read(0, a.length(), a, &cout));
42 TEST(SloppyCRCMap, truncate) {
49 scm.write(0, a.length(), a);
50 scm.write(4, a.length(), a);
51 ASSERT_EQ(0, scm.read(4, 4, a, &cout));
52 ASSERT_EQ(1, scm.read(4, 4, b, &cout));
54 ASSERT_EQ(0, scm.read(4, 4, b, &cout));
57 TEST(SloppyCRCMap, zero) {
64 scm.write(0, a.length(), a);
65 scm.write(4, a.length(), a);
66 ASSERT_EQ(0, scm.read(4, 4, a, &cout));
67 ASSERT_EQ(1, scm.read(4, 4, b, &cout));
69 ASSERT_EQ(1, scm.read(4, 4, a, &cout));
70 ASSERT_EQ(1, scm.read(4, 4, b, &cout));
76 ASSERT_EQ(0, scm.read(0, 4, a, &cout));
77 ASSERT_EQ(0, scm.read(4, 4, c, &cout));
79 ASSERT_EQ(1, scm.read(0, 4, a, &cout));
80 ASSERT_EQ(0, scm.read(0, 4, c, &cout));
83 TEST(SloppyCRCMap, clone_range) {
88 a.append("asdfghjkl");
91 src.write(0, a.length(), a);
92 src.write(8, a.length(), a);
93 src.write(16, a.length(), a);
95 dst.write(0, b.length(), b);
96 dst.clone_range(0, 8, 0, src);
97 ASSERT_EQ(2, dst.read(0, 8, b, &cout));
98 ASSERT_EQ(0, dst.read(8, 8, b, &cout));
100 dst.write(16, b.length(), b);
101 ASSERT_EQ(2, dst.read(16, 8, a, &cout));
102 dst.clone_range(16, 8, 16, src);
103 ASSERT_EQ(0, dst.read(16, 8, a, &cout));
105 dst.write(16, b.length(), b);
106 ASSERT_EQ(1, dst.read(16, 4, a, &cout));
107 dst.clone_range(16, 8, 2, src);
108 ASSERT_EQ(0, dst.read(16, 4, a, &cout));
110 dst.write(0, b.length(), b);
111 dst.write(8, b.length(), b);
112 ASSERT_EQ(2, dst.read(0, 8, a, &cout));
113 ASSERT_EQ(2, dst.read(8, 8, a, &cout));
114 dst.clone_range(2, 8, 0, src);
115 ASSERT_EQ(0, dst.read(0, 8, a, &cout));
116 ASSERT_EQ(0, dst.read(8, 4, a, &cout));