Index: uspace/lib/cpp/include/internal/test/test.hpp
===================================================================
--- uspace/lib/cpp/include/internal/test/test.hpp	(revision 4e6fb2fa387fccc6660d9a41f792381cd8e0d5f7)
+++ uspace/lib/cpp/include/internal/test/test.hpp	(revision 471e313b8aeca4c91e7934938a57766f90887aa7)
@@ -41,4 +41,8 @@
 
             virtual ~test_suite() = default;
+
+            unsigned int get_failed() const noexcept;
+
+            unsigned int get_succeeded() const noexcept;
 
         protected:
Index: uspace/lib/cpp/include/internal/test/tests.hpp
===================================================================
--- uspace/lib/cpp/include/internal/test/tests.hpp	(revision 4e6fb2fa387fccc6660d9a41f792381cd8e0d5f7)
+++ uspace/lib/cpp/include/internal/test/tests.hpp	(revision 471e313b8aeca4c91e7934938a57766f90887aa7)
@@ -30,8 +30,55 @@
 #define LIBCPP_TESTS
 
+#include <cstdio>
 #include <internal/test/test.hpp>
+#include <vector>
 
 namespace std::test
 {
+    class test_set
+    {
+        public:
+            test_set() = default;
+
+            template<class T>
+            void add()
+            {
+                tests_.push_back(new T{});
+            }
+
+            bool run()
+            {
+                bool res{true};
+                unsigned int succeeded{};
+                unsigned int failed{};
+
+                for (auto test: tests_)
+                {
+                    res &= test->run();
+                    succeeded += test->get_succeeded();
+                    failed += test->get_failed();
+                }
+
+                std::printf("\n");
+                if (res)
+                    std::printf("[TESTS SUCCEEDED!]");
+                else
+                    std::printf("[TESTS FAILED]");
+                std::printf("[%u OK][%u FAIL][%u TOTAL]\n",
+                            succeeded, failed, (succeeded + failed));
+
+                return res;
+            }
+
+            ~test_set()
+            {
+                // TODO: Gimme unique_ptr!
+                for (auto ptr: tests_)
+                    delete ptr;
+            }
+        private:
+            std::vector<test_suite*> tests_{};
+    };
+
     class array_test: public test_suite
     {
Index: uspace/lib/cpp/src/internal/test/test.cpp
===================================================================
--- uspace/lib/cpp/src/internal/test/test.cpp	(revision 4e6fb2fa387fccc6660d9a41f792381cd8e0d5f7)
+++ uspace/lib/cpp/src/internal/test/test.cpp	(revision 471e313b8aeca4c91e7934938a57766f90887aa7)
@@ -47,7 +47,17 @@
     bool test_suite::end()
     {
-        std::printf("[TEST END][%s][%lu OK][%lu FAIL]\n",
+        std::printf("[TEST END][%s][%u OK][%u FAIL]\n",
                     name(), succeeded_, failed_);
         return ok_;
     }
+
+    unsigned int test_suite::get_failed() const noexcept
+    {
+        return failed_;
+    }
+
+    unsigned int test_suite::get_succeeded() const noexcept
+    {
+        return succeeded_;
+    }
 }
