Home | History | Annotate | Download | only in test
      1 // Copyright 2014, VIXL authors
      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 "utils-vixl.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 trace_branch() { return trace_branch_; }
     56   static void set_trace_branch(bool value) { trace_branch_ = value; }
     57   static bool disassemble() { return disassemble_; }
     58   static void set_disassemble(bool value) { disassemble_ = value; }
     59   static bool coloured_trace() { return coloured_trace_; }
     60   static void set_coloured_trace(bool value) { coloured_trace_ = value; }
     61   static bool instruction_stats() { return instruction_stats_; }
     62   static void set_instruction_stats(bool value) { instruction_stats_ = value; }
     63   static bool generate_test_trace() { return generate_test_trace_; }
     64   static void set_generate_test_trace(bool value) {
     65     generate_test_trace_ = value;
     66   }
     67 
     68   // The debugger is needed to trace register values.
     69   static bool run_debugger() { return debug_; }
     70 
     71  private:
     72   const char* name_;
     73   TestFunction* callback_;
     74 
     75   static Test* first_;
     76   static Test* last_;
     77   Test* next_;
     78   static bool debug_;
     79   static bool trace_sim_;
     80   static bool trace_reg_;
     81   static bool trace_write_;
     82   static bool trace_branch_;
     83   static bool disassemble_;
     84   static bool coloured_trace_;
     85   static bool instruction_stats_;
     86   static bool generate_test_trace_;
     87 };
     88 
     89 // Define helper macros for test files.
     90 
     91 // Macro to register a test. It instantiates a Test and registers its
     92 // callback function.
     93 #define TEST_(Name)                     \
     94   void Test##Name();                    \
     95   Test test_##Name(#Name, &Test##Name); \
     96   void Test##Name()
     97 }  // namespace vixl
     98 
     99 #endif  // TEST_TEST_H_
    100