summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/splaytree.C5
-rw-r--r--src/usr/testcore/lib/stltest.H12
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.");
+ }
+
+
}
OpenPOWER on IntegriCloud