diff --git a/Tests/BaseLib/TestQuicksort.cpp b/Tests/BaseLib/TestQuicksort.cpp
index 9af42d1232d1f27ba5144b5258dfb16472bfa21c..68660ed0e2f55ae7a3efa5f03d782662793fbc44 100644
--- a/Tests/BaseLib/TestQuicksort.cpp
+++ b/Tests/BaseLib/TestQuicksort.cpp
@@ -17,6 +17,7 @@
 #include "quicksort.h"
 
 #include <algorithm>
+#include <sstream>
 #include <string>
 #include <vector>
 
@@ -58,3 +59,74 @@ TEST(BaseLib, QuicksortSortsCorrectly) {
     ASSERT_TRUE(quicksortSortsAsSTLSort.check());
 }
 
+// Permutations of sorted, unique vector remain untouched.
+class QuicksortCheckPermutations : public Property<std::vector<int>> {
+	bool accepts(const std::vector<int>& xs)
+	{
+		return xs.size() > 2 &&
+			std::is_sorted(xs.begin(), xs.end()) &&
+			(std::adjacent_find(xs.begin(), xs.end()) == xs.end());
+	}
+
+    bool holdsFor(const std::vector<int>& xs)
+    {
+        std::vector<size_t> perm(xs.size());
+		for (size_t i = 0; i < perm.size(); ++i)
+			perm[i] = i;
+
+        BaseLib::quicksort((int*)&(xs[0]), 0, xs.size(), &(perm[0]));
+
+		for (size_t i = 0; i < perm.size(); ++i)
+			if (perm[i] != i)
+				return false;
+        return true;
+    }
+
+	const std::string classify(const std::vector<int>& xs)
+	{
+		std::stringstream ss;
+		ss << "size " << xs.size();
+		return ss.str();
+	}
+};
+
+TEST(BaseLib, QuicksortReportCorrectPermutations) {
+    QuicksortCheckPermutations quicksortCheckPermutations;
+    ASSERT_TRUE(quicksortCheckPermutations.check(200, 100000));
+}
+
+// Permutations of reverse sorted, unique vector is also reversed.
+class QuicksortCheckPermutationsReverse : public Property<std::vector<int>> {
+	bool accepts(const std::vector<int>& xs)
+	{
+		return xs.size() > 2 &&
+			std::is_sorted(xs.rbegin(), xs.rend()) &&
+			(std::adjacent_find(xs.rbegin(), xs.rend()) == xs.rend());
+	}
+
+    bool holdsFor(const std::vector<int>& xs)
+    {
+        std::vector<size_t> perm(xs.size());
+		for (size_t i = 0; i < perm.size(); ++i)
+			perm[i] = i;
+
+        BaseLib::quicksort((int*)&(xs[0]), 0, xs.size(), &(perm[0]));
+
+		for (size_t i = 0; i < perm.size(); ++i)
+			if (perm[i] != perm.size() - i - 1)
+				return false;
+        return true;
+    }
+
+	const std::string classify(const std::vector<int>& xs)
+	{
+		std::stringstream ss;
+		ss << "size " << xs.size();
+		return ss.str();
+	}
+};
+
+TEST(BaseLib, QuicksortReportCorrectPermutationsReverse) {
+    QuicksortCheckPermutationsReverse quicksortCheckPermutationsReverse;
+    ASSERT_TRUE(quicksortCheckPermutationsReverse.check(200, 100000));
+}