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 verbose() { return verbose_; }
     48   static void set_verbose(bool value) { verbose_ = value; }
     49   static bool debug() { return debug_; }
     50   static void set_debug(bool value) { debug_ = value; }
     51   static bool trace_sim() { return trace_sim_; }
     52   static void set_trace_sim(bool value) { trace_sim_ = value; }
     53   static bool trace_reg() { return trace_reg_; }
     54   static void set_trace_reg(bool value) { trace_reg_ = value; }
     55   static bool trace_write() { return trace_write_; }
     56   static void set_trace_write(bool value) { trace_write_ = value; }
     57   static bool trace_branch() { return trace_branch_; }
     58   static void set_trace_branch(bool value) { trace_branch_ = value; }
     59   static bool disassemble() { return disassemble_; }
     60   static void set_disassemble(bool value) { disassemble_ = value; }
     61   static bool disassemble_infrastructure() {
     62     return disassemble_infrastructure_;
     63   }
     64   static void set_disassemble_infrastructure(bool value) {
     65     disassemble_infrastructure_ = value;
     66   }
     67   static bool coloured_trace() { return coloured_trace_; }
     68   static void set_coloured_trace(bool value) { coloured_trace_ = value; }
     69   static bool instruction_stats() { return instruction_stats_; }
     70   static void set_instruction_stats(bool value) { instruction_stats_ = value; }
     71   static bool generate_test_trace() { return generate_test_trace_; }
     72   static void set_generate_test_trace(bool value) {
     73     generate_test_trace_ = value;
     74   }
     75 
     76   // The debugger is needed to trace register values.
     77   static bool run_debugger() { return debug_; }
     78 
     79  private:
     80   const char* name_;
     81   TestFunction* callback_;
     82 
     83   static Test* first_;
     84   static Test* last_;
     85   Test* next_;
     86   static bool verbose_;
     87   static bool debug_;
     88   static bool trace_sim_;
     89   static bool trace_reg_;
     90   static bool trace_write_;
     91   static bool trace_branch_;
     92   static bool disassemble_;
     93   static bool disassemble_infrastructure_;
     94   static bool coloured_trace_;
     95   static bool instruction_stats_;
     96   static bool generate_test_trace_;
     97 };
     98 
     99 // Define helper macros for test files.
    100 
    101 // Macro to register a test. It instantiates a Test and registers its
    102 // callback function.
    103 #define TEST_(Name)                     \
    104   void Test##Name();                    \
    105   Test test_##Name(#Name, &Test##Name); \
    106   void Test##Name()
    107 }  // namespace vixl
    108 
    109 #endif  // TEST_TEST_H_
    110