]> git.ipfire.org Git - thirdparty/squid.git/blob - test-suite/mem_hdr_test.cc
SourceFormat Enforcement
[thirdparty/squid.git] / test-suite / mem_hdr_test.cc
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 /* DEBUG: section 19 Store Memory Primitives */
10
11 #include "squid.h"
12 #include "base/TextException.h"
13 #include "Generic.h"
14 #include "mem_node.h"
15 #include "stmem.h"
16
17 #include <iostream>
18 #include <sstream>
19
20 /*For a reason required on some platforms */
21 unsigned int TextException::FileNameHash(const char *fname)
22 {
23 return 0;
24 }
25
26 void
27 testLowAndHigh()
28 {
29 mem_hdr aHeader;
30 assert (aHeader.lowestOffset() == 0);
31 assert (aHeader.write (StoreIOBuffer()));
32 assert (aHeader.lowestOffset() == 0);
33 assert (aHeader.write (StoreIOBuffer(0, 1, (char *)NULL)));
34 assert (aHeader.lowestOffset() == 0);
35 char * sampleData = xstrdup ("A");
36 assert (aHeader.write (StoreIOBuffer(1, 100, sampleData)));
37 safe_free (sampleData);
38 assert (aHeader.lowestOffset() == 100);
39 assert (aHeader.endOffset() == 101);
40 sampleData = xstrdup ("B");
41 assert (aHeader.write (StoreIOBuffer(1, 10, sampleData)));
42 safe_free (sampleData);
43 assert (aHeader.lowestOffset() == 10);
44 assert (aHeader.endOffset() == 101);
45 assert (aHeader.hasContigousContentRange(Range<int64_t>(10,11)));
46 assert (!aHeader.hasContigousContentRange(Range<int64_t>(10,12)));
47 assert (!aHeader.hasContigousContentRange(Range<int64_t>(10,101)));
48 }
49
50 void
51 testSplayOfNodes()
52 {
53 Splay<mem_node *> aSplay;
54 mem_node *temp5;
55 temp5 = new mem_node(5);
56 temp5->nodeBuffer.length = 10;
57 aSplay.insert (temp5, mem_hdr::NodeCompare);
58 assert (aSplay.start()->data == temp5);
59 assert (aSplay.finish()->data == temp5);
60
61 mem_node *temp0;
62 temp0 = new mem_node(0);
63 temp0->nodeBuffer.length = 5;
64 aSplay.insert (temp0, mem_hdr::NodeCompare);
65 assert (aSplay.start()->data == temp0);
66 assert (aSplay.finish()->data == temp5);
67
68 mem_node *temp14;
69 temp14 = new mem_node (14);
70 temp14->nodeBuffer.length = 1;
71 assert (aSplay.find(temp14,mem_hdr::NodeCompare));
72 delete temp14;
73
74 mem_node ref13 (13);
75 assert (!aSplay.find(&ref13,mem_hdr::NodeCompare));
76 ref13.nodeBuffer.length = 1;
77 assert (aSplay.find(&ref13,mem_hdr::NodeCompare));
78 aSplay.destroy();
79 }
80
81 void
82 testHdrVisit()
83 {
84 mem_hdr aHeader;
85 char * sampleData = xstrdup ("A");
86 assert (aHeader.write (StoreIOBuffer(1, 100, sampleData)));
87 safe_free (sampleData);
88 sampleData = xstrdup ("B");
89 assert (aHeader.write (StoreIOBuffer(1, 102, sampleData)));
90 safe_free (sampleData);
91 std::ostringstream result;
92 PointerPrinter<mem_node *> foo(result, "\n");
93 for_each (aHeader.getNodes().end(), aHeader.getNodes().end(), foo);
94 for_each (aHeader.getNodes().begin(), aHeader.getNodes().begin(), foo);
95 for_each (aHeader.getNodes().begin(), aHeader.getNodes().end(), foo);
96 std::ostringstream expectedResult;
97 expectedResult << "[100,101)" << std::endl << "[102,103)" << std::endl;
98 assert (result.str() == expectedResult.str());
99 }
100
101 int
102 main(int argc, char **argv)
103 {
104 assert (mem_node::InUseCount() == 0);
105 testLowAndHigh();
106 assert (mem_node::InUseCount() == 0);
107 testSplayOfNodes();
108 assert (mem_node::InUseCount() == 0);
109 testHdrVisit();
110 assert (mem_node::InUseCount() == 0);
111 return 0;
112 }
113