LCOV - code coverage report
Current view: top level - tests/harness - testutils.h (source / functions) Hit Total Coverage
Test: Test Coverage for xapian-core 954b5873a738 Lines: 2 2 100.0 %
Date: 2019-06-30 05:20:33 Functions: 1 1 100.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /** @file testutils.h
       2                 :            :  * @brief Xapian-specific test helper functions and macros.
       3                 :            :  */
       4                 :            : /* Copyright 1999,2000,2001 BrightStation PLC
       5                 :            :  * Copyright 2002,2003,2007,2008,2015 Olly Betts
       6                 :            :  *
       7                 :            :  * This program is free software; you can redistribute it and/or
       8                 :            :  * modify it under the terms of the GNU General Public License as
       9                 :            :  * published by the Free Software Foundation; either version 2 of the
      10                 :            :  * License, or (at your option) any later version.
      11                 :            :  *
      12                 :            :  * This program is distributed in the hope that it will be useful,
      13                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15                 :            :  * GNU General Public License for more details.
      16                 :            :  *
      17                 :            :  * You should have received a copy of the GNU General Public License
      18                 :            :  * along with this program; if not, write to the Free Software
      19                 :            :  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
      20                 :            :  * USA
      21                 :            :  */
      22                 :            : 
      23                 :            : #ifndef XAPIAN_INCLUDED_TESTUTILS_H
      24                 :            : #define XAPIAN_INCLUDED_TESTUTILS_H
      25                 :            : 
      26                 :            : #include "testsuite.h"
      27                 :            : #include <xapian.h>
      28                 :            : 
      29                 :            : // ######################################################################
      30                 :            : // Useful display operators
      31                 :            : 
      32                 :            : std::ostream &operator<<(std::ostream &os,
      33                 :            :                          const std::vector<Xapian::docid> &ints);
      34                 :            : 
      35                 :            : // ######################################################################
      36                 :            : // Useful comparison operators
      37                 :            : 
      38                 :            : // Test that the weights and docids in two mset ranges are the same.
      39                 :            : bool
      40                 :            : mset_range_is_same(const Xapian::MSet &mset1, unsigned int first1,
      41                 :            :                    const Xapian::MSet &mset2, unsigned int first2,
      42                 :            :                    unsigned int count);
      43                 :            : 
      44                 :            : // Test that the weights in two mset ranges are the same, ignoring docids.
      45                 :            : bool
      46                 :            : mset_range_is_same_weights(const Xapian::MSet &mset1, unsigned int first1,
      47                 :            :                            const Xapian::MSet &mset2, unsigned int first2,
      48                 :            :                            unsigned int count);
      49                 :            : 
      50                 :            : bool operator==(const Xapian::MSet &first, const Xapian::MSet &second);
      51                 :            : 
      52                 :         24 : inline bool operator!=(const Xapian::MSet &first, const Xapian::MSet &second)
      53                 :            : {
      54                 :         24 :     return !(first == second);
      55                 :            : }
      56                 :            : 
      57                 :            : void mset_expect_order(const Xapian::MSet &A,
      58                 :            :                        Xapian::docid d1 = 0, Xapian::docid d2 = 0,
      59                 :            :                        Xapian::docid d3 = 0, Xapian::docid d4 = 0,
      60                 :            :                        Xapian::docid d5 = 0, Xapian::docid d6 = 0,
      61                 :            :                        Xapian::docid d7 = 0, Xapian::docid d8 = 0,
      62                 :            :                        Xapian::docid d9 = 0, Xapian::docid d10 = 0,
      63                 :            :                        Xapian::docid d11 = 0, Xapian::docid d12 = 0);
      64                 :            : 
      65                 :            : void test_mset_order_equal(const Xapian::MSet &mset1,
      66                 :            :                            const Xapian::MSet &mset2);
      67                 :            : 
      68                 :            : // ######################################################################
      69                 :            : // Useful test macros
      70                 :            : 
      71                 :            : /// Check MSet M has size S.
      72                 :            : #define TEST_MSET_SIZE(M, S) TEST_AND_EXPLAIN(((M).size() == (S)), \
      73                 :            :         "MSet '" STRINGIZE(M) "' is not of expected size: was '" << \
      74                 :            :         (M).size() << "' expected '" << (S) << "':\n" << \
      75                 :            :         "Full mset was:\n" << (M))
      76                 :            : 
      77                 :            : /// Helper macro.
      78                 :            : #define TEST_EXCEPTION_(TYPE, CODE, EXACT) \
      79                 :            :     do { \
      80                 :            :         expected_exception = STRINGIZE(TYPE); \
      81                 :            :         if (strncmp(expected_exception, "Xapian::", \
      82                 :            :                     CONST_STRLEN("Xapian::")) == 0) { \
      83                 :            :             expected_exception += CONST_STRLEN("Xapian::"); \
      84                 :            :         } \
      85                 :            :         try { \
      86                 :            :             CODE; \
      87                 :            :             FAIL_TEST("Expected " << expected_exception << " not thrown"); \
      88                 :            :         } catch (const TYPE& xap_ex_obj_) { \
      89                 :            :             if (EXACT) { \
      90                 :            :                 if (strcmp(expected_exception, xap_ex_obj_.get_type()) != 0) { \
      91                 :            :                     FAIL_TEST("Caught subclass " << xap_ex_obj_.get_type() << \
      92                 :            :                               " of expected " << expected_exception); \
      93                 :            :                 } \
      94                 :            :             } \
      95                 :            :         } \
      96                 :            :         expected_exception = NULL;\
      97                 :            :     } while (0)
      98                 :            : 
      99                 :            : /// Check that CODE throws Xapian exception derived from TYPE.
     100                 :            : #define TEST_EXCEPTION_BASE_CLASS(TYPE, CODE) TEST_EXCEPTION_(TYPE, CODE, false)
     101                 :            : 
     102                 :            : /// Check that CODE throws exactly Xapian exception TYPE.
     103                 :            : #define TEST_EXCEPTION(TYPE, CODE) TEST_EXCEPTION_(TYPE, CODE, true)
     104                 :            : 
     105                 :            : #endif // XAPIAN_INCLUDED_TESTUTILS_H

Generated by: LCOV version 1.11