diff options
-rw-r--r-- | src/lib/splaytree.C | 5 | ||||
-rw-r--r-- | src/usr/testcore/lib/stltest.H | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/splaytree.C b/src/lib/splaytree.C index 3ce271344..7505d4164 100644 --- a/src/lib/splaytree.C +++ b/src/lib/splaytree.C @@ -150,6 +150,11 @@ namespace Util { y->parent->child[direction(y->parent, n)] = y; } + else + { + // Removing root, so update header. + header.parent = y; + } y->child[LEFT] = n->child[LEFT]; if (y->child[LEFT]) diff --git a/src/usr/testcore/lib/stltest.H b/src/usr/testcore/lib/stltest.H index 2c4efcb14..dd308fdc2 100644 --- a/src/usr/testcore/lib/stltest.H +++ b/src/usr/testcore/lib/stltest.H @@ -211,6 +211,18 @@ class STLTest : public CxxTest::TestSuite TS_FAIL("std::map fail Erase by iterator size test."); } + // Test erase of root node. (find will splay to top). + mymap5.erase(mymap5.find(v6)); + if (mymap5.end() != mymap5.find(v6)) + { + TS_FAIL("std::map fail Erase by iterator to root test."); + } + if (mymap.size() != (mymap5.size() + 2)) + { + TS_FAIL("std::map fail Erase by iterator to root size test."); + } + + } |