Subversion Repositories dashGPS

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _JTEST_TEST_H_
  2. #define _JTEST_TEST_H_
  3.  
  4. /*--------------------------------------------------------------------------------*/
  5. /* Includes */
  6. /*--------------------------------------------------------------------------------*/
  7.  
  8. #include <stdint.h>
  9. #include "jtest_util.h"
  10. #include "jtest_test_ret.h"
  11.  
  12. /*--------------------------------------------------------------------------------*/
  13. /* Type Definitions */
  14. /*--------------------------------------------------------------------------------*/
  15.  
  16. /**
  17.  *  A struct which represents a Test in the JTEST framework.  This struct is
  18.  *  used to enable, run, and describe the test it represents.
  19.  */
  20. typedef struct JTEST_TEST_struct
  21. {
  22.     JTEST_TEST_RET_t ( * test_fn_ptr)(void); /**< Pointer to the test function. */
  23.     char   * test_fn_str;                    /**< Name of the test function */
  24.     char   * fut_str;           /**< Name of the function under test. */
  25.  
  26.     /**
  27.      *  Flags that govern how the #JTEST_TEST_t behaves.
  28.      */
  29.     union {
  30.         struct {
  31.             unsigned enabled : 1;
  32.             unsigned unused  : 7;
  33.         } bits;
  34.         uint8_t byte;           /* Access all flags at once. */
  35.     } flags;
  36.    
  37. } JTEST_TEST_t;
  38.  
  39. /*--------------------------------------------------------------------------------*/
  40. /* Macros and Defines */
  41. /*--------------------------------------------------------------------------------*/
  42.  
  43. /**
  44.  *  Assign a test function to the #JTEST_TEST_t struct.
  45.  */
  46. #define JTEST_TEST_SET_FN(jtest_test_ptr, fn_ptr)                   \
  47.     JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, test_fn_ptr, fn_ptr)
  48.  
  49. /**
  50.  *  Specify a function under test (FUT) for the #JTEST_TEST_t struct.
  51.  */
  52. #define JTEST_TEST_SET_FUT(jtest_test_ptr, str)                 \
  53.     JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, fut_str, str)
  54.  
  55. /* Macros concerning JTEST_TEST_t flags */
  56. /*--------------------------------------------------------------------------------*/
  57.  
  58. #define JTEST_TEST_FLAG_SET 1 /**< Value of a set #JTEST_TEST_t flag. */
  59. #define JTEST_TEST_FLAG_CLR 0 /**< Value of a cleared #JTEST_TEST_t flag. */
  60.  
  61. /**
  62.  *  Evaluate to the flag in #JTEST_TEST_t having flag_name.
  63.  */
  64. #define JTEST_TEST_FLAG(jtest_test_ptr, flag_name)  \
  65.     ((jtest_test_ptr)->flags.bits.flag_name)
  66.  
  67. /**
  68.  *  Dispatch macro for setting and clearing #JTEST_TEST_t flags.
  69.  *
  70.  *  @param jtest_test_ptr Pointer to a #JTEST_TEST_t struct.
  71.  *  @param flag_name      Name of the flag to set in #JTEST_TEST_t.flags.bits
  72.  *  @param xxx            Vaid values: "SET" or "CLR"
  73.  *
  74.  *  @note This function depends on JTEST_TEST_FLAG_SET and JTEST_TEST_FLAG_CLR.
  75.  */
  76. #define JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, xxx)                  \
  77.     do                                                                       \
  78.     {                                                                        \
  79.         JTEST_TEST_FLAG(jtest_test_ptr, flag_name) = JTEST_TEST_FLAG_##xxx ; \
  80.     } while (0)
  81.  
  82. /**
  83.  *  Specification of #JTEST_TEST_XXX_FLAG to set #JTEST_TEST_t flags.
  84.  */
  85. #define JTEST_TEST_SET_FLAG(jtest_test_ptr, flag_name)                       \
  86.     JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, SET)
  87.  
  88. /**
  89.  *  Specification of #JTEST_TEST_XXX_FLAG to clear #JTEST_TEST_t flags.
  90.  */
  91. #define JTEST_TEST_CLR_FLAG(jtest_test_ptr, flag_name)                       \
  92.     JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, CLR)
  93.  
  94. /**
  95.  *  Evaluate to true if the #JTEST_TEST_t is enabled.
  96.  */
  97. #define JTEST_TEST_IS_ENABLED(jtest_test_ptr)                           \
  98.     (JTEST_TEST_FLAG(jtest_test_ptr, enabled) == JTEST_TEST_FLAG_SET)
  99.  
  100. #endif /* _JTEST_TEST_H_ */
  101.