Skip to content

Commit af17f19

Browse files
committed
Unit test for Pointer::operator<().
1 parent 055f1fa commit af17f19

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

test/unittest/pointertest.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
#include "unittest.h"
1616
#include "rapidjson/pointer.h"
1717
#include "rapidjson/stringbuffer.h"
18+
#include "rapidjson/ostreamwrapper.h"
1819
#include <sstream>
20+
#include <set>
1921

2022
using namespace rapidjson;
2123

@@ -1493,6 +1495,71 @@ TEST(Pointer, Ambiguity) {
14931495
}
14941496
}
14951497

1498+
TEST(Pointer, LessThan) {
1499+
static const char *pointers[] = {
1500+
"/a/b",
1501+
"/a/c",
1502+
"/a",
1503+
"/d/1",
1504+
"/d/2/z",
1505+
"/d/2/3",
1506+
"/d/2",
1507+
"/d/2/zz",
1508+
"/d/1",
1509+
"/d/2/z",
1510+
"/e/f~g",
1511+
"/e/f~0g",
1512+
"/e/f~1g",
1513+
"/e/f~~g",
1514+
"#/e/f%2fg",
1515+
"/e/f.g",
1516+
""
1517+
};
1518+
static struct {
1519+
const char *string;
1520+
bool valid;
1521+
} ordered_pointers[] = {
1522+
{ "", true },
1523+
{ "/a", true },
1524+
{ "/a/b", true },
1525+
{ "/a/c", true },
1526+
{ "/d/1", true },
1527+
{ "/d/1", true },
1528+
{ "/d/2", true },
1529+
{ "/d/2/3", true },
1530+
{ "/d/2/z", true },
1531+
{ "/d/2/z", true },
1532+
{ "/d/2/zz", true },
1533+
{ "/e/f.g", true },
1534+
{ "/e/f~1g", true },
1535+
{ "/e/f~1g", true }, // was "#/e/f%2fg"
1536+
{ "/e/f~0g", true },
1537+
{ "/e/f~g", false },
1538+
{ "/e/f~~g", false }
1539+
};
1540+
MemoryPoolAllocator<> allocator;
1541+
typedef GenericPointer<Value, MemoryPoolAllocator<> > PooledPointer;
1542+
std::multiset<PooledPointer> set;
1543+
size_t i;
1544+
1545+
for (i = 0; i < sizeof(pointers) / sizeof(*pointers); ++i) {
1546+
set.insert(PooledPointer(pointers[i], &allocator));
1547+
}
1548+
1549+
i = 0;
1550+
for (std::set<PooledPointer>::iterator it = set.begin(); it != set.end(); ++it) {
1551+
EXPECT_TRUE(i < sizeof(ordered_pointers) / sizeof(*ordered_pointers));
1552+
EXPECT_EQ(it->IsValid(), ordered_pointers[i].valid);
1553+
if (it->IsValid()) {
1554+
std::stringstream ss;
1555+
OStreamWrapper os(ss);
1556+
EXPECT_TRUE(it->Stringify(os));
1557+
EXPECT_EQ(ss.str(), ordered_pointers[i].string);
1558+
}
1559+
i++;
1560+
}
1561+
}
1562+
14961563
// https://github.com/Tencent/rapidjson/issues/483
14971564
namespace myjson {
14981565

0 commit comments

Comments
 (0)