Printing out the rerun command of each failed testcase

- After a testcase fail, print the arm_compute_validation command
  with filter specified and seed to rerun.

Resolves: COMPMID-5916

Signed-off-by: Ramy Elgammal <ramy.elgammal@arm.com>
Change-Id: I0c8214e7d3b61f01ce16f50499c29bfe08b6a885
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9673
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Pablo Marquez Tello <pablo.tello@arm.com>
Reviewed-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
diff --git a/tests/framework/Framework.h b/tests/framework/Framework.h
index 274f03a..72ec748 100644
--- a/tests/framework/Framework.h
+++ b/tests/framework/Framework.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2021 Arm Limited.
+ * Copyright (c) 2017-2021, 2023 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -64,6 +64,8 @@
     float                                          cooldown_sec{ -1.f };        /**< Delay between tests in seconds. */
     LogLevel                                       log_level{ LogLevel::NONE }; /**< Verbosity of the output. */
     bool                                           configure_only{ false };     /**< Only configure kernels */
+    bool                                           print_rerun_cmd{ false };    /**< Print the command to rerun the failed testcase */
+    unsigned int                                   seed{0};                     /**< The seed that is used to fill tensors with random values.*/
 };
 
 /** Information about a test case.
@@ -330,7 +332,7 @@
     Framework(const Framework &) = delete;
     Framework &operator=(const Framework &) = delete;
 
-    void run_test(const TestInfo &info, TestCaseFactory &test_factory);
+    TestResult::Status run_test(const TestInfo &info, TestCaseFactory &test_factory);
     std::map<TestResult::Status, int> count_test_results() const;
 
     /** Returns the current test suite name.
@@ -358,6 +360,8 @@
     std::vector<Printer *> _printers{};
     bool                   _configure_only{ false };
     bool                   _new_fixture_call{ false };
+    bool                   _print_rerun_cmd{ false };
+    unsigned int           _seed {0};
 
     using create_function = std::unique_ptr<Instrument>();
     std::map<InstrumentsDescription, create_function *> _available_instruments{};