File tree Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Expand file tree Collapse file tree 1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change 15
15
#include " unittest.h"
16
16
#include " rapidjson/pointer.h"
17
17
#include " rapidjson/stringbuffer.h"
18
+ #include " rapidjson/ostreamwrapper.h"
18
19
#include < sstream>
20
+ #include < set>
19
21
20
22
using namespace rapidjson ;
21
23
@@ -1493,6 +1495,71 @@ TEST(Pointer, Ambiguity) {
1493
1495
}
1494
1496
}
1495
1497
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
+
1496
1563
// https://github.com/Tencent/rapidjson/issues/483
1497
1564
namespace myjson {
1498
1565
You can’t perform that action at this time.
0 commit comments