Index: uspace/lib/cpp/include/internal/test/test.hpp
===================================================================
--- uspace/lib/cpp/include/internal/test/test.hpp	(revision a6ca1bc63d024ea03c46f7322c9aa5555630a775)
+++ uspace/lib/cpp/include/internal/test/test.hpp	(revision 509738fde14966900e038b12e07bb95202db7c02)
@@ -44,4 +44,10 @@
         protected:
             void report(bool, const char*);
+            void start();
+            bool end();
+
+            unsigned int failed_{};
+            unsigned int succeeded_{};
+            bool ok_{true};
 
             template<class... Args>
@@ -49,7 +55,14 @@
             {
                 if (!assert_eq(std::forward<Args>(args)...))
+                {
                     report(false, tname);
+                    ++failed_;
+                    ok_ = false;
+                }
                 else
+                {
                     report(true, tname);
+                    ++succeeded_;
+                }
             }
 
Index: uspace/lib/cpp/src/internal/test/array.cpp
===================================================================
--- uspace/lib/cpp/src/internal/test/array.cpp	(revision a6ca1bc63d024ea03c46f7322c9aa5555630a775)
+++ uspace/lib/cpp/src/internal/test/array.cpp	(revision 509738fde14966900e038b12e07bb95202db7c02)
@@ -36,4 +36,6 @@
     bool array_test::run()
     {
+        start();
+
         auto check1 = {1, 2, 3, 4};
         auto check2 = {4, 3, 2, 1};
@@ -99,5 +101,5 @@
         // TODO: test bound checking of at when implemented
 
-        return true;
+        return end();
     }
 
Index: uspace/lib/cpp/src/internal/test/string.cpp
===================================================================
--- uspace/lib/cpp/src/internal/test/string.cpp	(revision a6ca1bc63d024ea03c46f7322c9aa5555630a775)
+++ uspace/lib/cpp/src/internal/test/string.cpp	(revision 509738fde14966900e038b12e07bb95202db7c02)
@@ -36,4 +36,6 @@
     bool string_test::run()
     {
+        start();
+
         test_construction_and_assignment();
         test_append();
@@ -44,5 +46,5 @@
         test_find();
 
-        return true;
+        return end();
     }
 
Index: uspace/lib/cpp/src/internal/test/test.cpp
===================================================================
--- uspace/lib/cpp/src/internal/test/test.cpp	(revision a6ca1bc63d024ea03c46f7322c9aa5555630a775)
+++ uspace/lib/cpp/src/internal/test/test.cpp	(revision 509738fde14966900e038b12e07bb95202db7c02)
@@ -32,5 +32,4 @@
 namespace std::test
 {
-
     void test_suite::report(bool result, const char* tname)
     {
@@ -41,3 +40,14 @@
     }
 
+    void test_suite::start()
+    {
+        std::printf("\n[TEST START][%s]\n", name());
+    }
+
+    bool test_suite::end()
+    {
+        std::printf("[TEST END][%s][%lu OK][%lu FAIL]\n",
+                    name(), succeeded_, failed_);
+        return ok_;
+    }
 }
Index: uspace/lib/cpp/src/internal/test/vector.cpp
===================================================================
--- uspace/lib/cpp/src/internal/test/vector.cpp	(revision a6ca1bc63d024ea03c46f7322c9aa5555630a775)
+++ uspace/lib/cpp/src/internal/test/vector.cpp	(revision 509738fde14966900e038b12e07bb95202db7c02)
@@ -37,8 +37,11 @@
     bool vector_test::run()
     {
+        start();
+
         test_construction_and_assignment();
         test_insert();
         test_erase();
-        return true;
+
+        return end();
     }
 
