Home | History | Annotate | Download | only in test
      1 // Copyright 2014, ARM Limited
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are met:
      6 //
      7 //   * Redistributions of source code must retain the above copyright notice,
      8 //     this list of conditions and the following disclaimer.
      9 //   * Redistributions in binary form must reproduce the above copyright notice,
     10 //     this list of conditions and the following disclaimer in the documentation
     11 //     and/or other materials provided with the distribution.
     12 //   * Neither the name of ARM Limited nor the names of its contributors may be
     13 //     used to endorse or promote products derived from this software without
     14 //     specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
     17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
     20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 
     27 #ifndef TEST_TEST_H_
     28 #define TEST_TEST_H_
     29 
     30 #include "vixl/utils.h"
     31 
     32 namespace vixl {
     33 
     34 // Each actual test is represented by a Test instance.
     35 // Tests are appended to a static linked list upon creation.
     36 class Test {
     37   typedef void (TestFunction)();
     38 
     39  public:
     40   Test(const char* name, TestFunction* callback);
     41 
     42   const char* name() { return name_; }
     43   TestFunction* callback() { return callback_; }
     44   static Test* first() { return first_; }
     45   static Test* last() { return last_; }
     46   Test* next() { return next_; }
     47   static bool debug() { return debug_; }
     48   static void set_debug(bool value) { debug_ = value; }
     49   static bool trace_sim() { return trace_sim_; }
     50   static void set_trace_sim(bool value) { trace_sim_ = value; }
     51   static bool trace_reg() { return trace_reg_; }
     52   static void set_trace_reg(bool value) { trace_reg_ = value; }
     53   static bool trace_write() { return trace_write_; }
     54   static void set_trace_write(bool value) { trace_write_ = value; }
     55   static bool coloured_trace() { return coloured_trace_; }
     56   static void set_coloured_trace(bool value) { coloured_trace_ = value; }
     57   static bool instruction_stats() { return instruction_stats_; }
     58   static void set_instruction_stats(bool value) { instruction_stats_ = value; }
     59   static bool sim_test_trace() { return sim_test_trace_; }
     60   static void set_sim_test_trace(bool value) { sim_test_trace_ = value; }
     61 
     62   // The debugger is needed to trace register values.
     63   static bool run_debugger() { return debug_; }
     64 
     65  private:
     66   const char* name_;
     67   TestFunction* callback_;
     68 
     69   static Test* first_;
     70   static Test* last_;
     71   Test* next_;
     72   static bool debug_;
     73   static bool trace_sim_;
     74   static bool trace_reg_;
     75   static bool trace_write_;
     76   static bool coloured_trace_;
     77   static bool instruction_stats_;
     78   static bool sim_test_trace_;
     79 };
     80 
     81 // Define helper macros for test files.
     82 
     83 // Macro to register a test. It instantiates a Test and registers its
     84 // callback function.
     85 #define TEST_(Name)                                                            \
     86 void Test##Name();                                                             \
     87 Test test_##Name(#Name, &Test##Name);                                          \
     88 void Test##Name()
     89 }  // namespace vixl
     90 
     91 #endif  // TEST_TEST_H_
     92