diff --git a/test/MemorySpace.cpp b/test/MemorySpace.cpp
index fce502c59f41a7eb6880dbc1f5f6b341ce86b968..e3e3c50330e15b1b2ab83eff18038ed2d36556ff 100644
--- a/test/MemorySpace.cpp
+++ b/test/MemorySpace.cpp
@@ -235,6 +235,58 @@ bool TestMergeFreeRange()
 	return true;
 }
 
+bool TestClearAllIteratively()
+{
+	Range_t removableRange;
+	ZiprOptions_t opts;
+	opts.SetVerbose(true);
+	ZiprMemorySpace_t m(&opts);
+
+	m.AddFreeRange(Range_t(256, 512));
+	m.AddFreeRange(Range_t(513, 1024));
+	m.AddFreeRange(Range_t(1025, 4096));
+	m.PrintMemorySpace(cout);
+	if (m.GetRangeCount() != 3)
+		return false;
+	while (m.GetRangeCount())
+	{
+		removableRange = m.GetFreeRange(0);
+		m.RemoveFreeRange(removableRange);
+	}	
+	m.PrintMemorySpace(cout);
+	return m.GetRangeCount() == 0;
+}
+
+bool TestClearSomeIteratively()
+{
+	Range_t removableRange;
+	ZiprOptions_t opts;
+	opts.SetVerbose(true);
+	ZiprMemorySpace_t m(&opts);
+
+	m.AddFreeRange(Range_t(256, 512));
+	m.AddFreeRange(Range_t(513, 1024));
+	m.AddFreeRange(Range_t(1025, 4096));
+	m.PrintMemorySpace(cout);
+	if (m.GetRangeCount() != 3)
+		return false;
+	/*
+	 * NB: This is not pretty -- we are assuming that
+	 * the "last" entry is the one that we want to 
+	 * keep. Test does good testing, but insert order
+	 * should not be changed.
+	 */
+	while (m.GetRangeCount() != 1)
+	{
+		removableRange = m.GetFreeRange(0);
+		if (removableRange.GetEnd() == 4096)
+			continue;
+		m.RemoveFreeRange(removableRange);
+	}	
+	m.PrintMemorySpace(cout);
+	return m.GetRangeCount() == 1;
+}
+
 int main(int argc, char *argv[])
 {
 	INVOKE(TestSplitMemorySpace);
@@ -243,4 +295,6 @@ int main(int argc, char *argv[])
 	INVOKE(TestBinarySearch);
 	INVOKE(TestBinarySearchMaxRange);
 	INVOKE(TestInsertRemoveFreeRange);
+	INVOKE(TestClearAllIteratively);
+	INVOKE(TestClearSomeIteratively);
 }