LCOV - lcov.info - ept/textsearch/textsearch.test.h

LTP GCOV extension - code coverage report
Current view: | directory - ept/textsearch - textsearch.test.h
Test: | lcov.info
Date: | 2008-08-14 |  | Instrumented lines: | 74
Code covered: | 95.9 % |  | Executed lines: | 71

           1                 : // -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*-
           2                 : /*
           3                 :  * popcon test
           4                 :  *
           5                 :  * Copyright (C) 2007  Enrico Zini <enrico@debian.org>
           6                 :  *
           7                 :  * This program is free software; you can redistribute it and/or modify
           8                 :  * it under the terms of the GNU General Public License as published by
           9                 :  * the Free Software Foundation; either version 2 of the License, or
          10                 :  * (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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
          20                 :  */
          21                 :
          22                 : #include <ept/test.h>
          23                 : #include <ept/textsearch/textsearch.h>
          24                 : #include <ept/textsearch/maint/path.h>
          25                 : #include <ept/apt/apt.h>
          26                 : #include <wibble/sys/fs.h>
          27                 : #include <set>
          28                 :
          29                 : namespace ept {
          30                 : namespace textsearch {
          31                 : extern size_t max_index;
          32                 : }
          33                 : }
          34                 :
          35                 : using namespace std;
          36                 : using namespace ept;
          37                 : using namespace ept::textsearch;
          38                 : using namespace ept::apt;
          39                 :
          40                 : struct DirMaker
          41                 : {
          42               6 :         DirMaker(const std::string& name)
          43                 :         {
          44               6 :                 wibble::sys::fs::mkdirIfMissing(name, 0755);
          45               6 :         }
          46                 : };
          47                 :
          48                 : struct TestTextsearch : AptTestEnvironment
          49               6 : {
          50                 :         DirMaker md;
          51                 :         Path::OverrideIndexDir oid;
          52                 :         Apt apt;
          53                 :         TextSearch textsearch;
          54                 :
          55               6 :         TestTextsearch()
          56               6 :                 : md( TEST_ENV_DIR "xapian"), oid( TEST_ENV_DIR "xapian")
          57                 :         {
          58                 :                 try {
          59               6 :                         ept::textsearch::max_index = 1000;
          60               6 :                         textsearch.rebuildIfNeeded(apt);
          61               0 :                 } catch (Xapian::Error& e) {
          62               0 :                         cerr << e.get_type() << " " << e.get_msg() << " " << e.get_context() << endl;
          63               0 :                         throw;
          64                 :                 }
          65               6 :         }
          66                 :
          67                 : // Access an empty index
          68               1 :         Test empty()
          69                 :         {
          70               1 :                 Path::OverrideIndexDir oid("./empty");
          71               1 :                 TextSearch empty;
          72               1 :                 assert_eq(empty.timestamp(), 0);
          73               2 :                 assert(!empty.hasData());
          74               2 :                 assert(empty.needsRebuild(apt));
          75                 :                 /*
          76                 :                   Xapian::Enquire enq(empty.db());
          77                 :                   empty.search(enq, "apt");
          78                 :                   Xapian::MSet matches = enq.get_mset(0, 100);
          79                 :                   assert_eq(matches.size(), 0u);
          80                 :                 */
          81               1 :         }
          82                 :
          83                 : // Very basic access
          84               1 :         Test basicAccess()
          85                 :         {
          86               1 :                 assert(textsearch.hasData());
          87               2 :                 assert(textsearch.timestamp() > 0);
          88               2 :                 assert(!textsearch.needsRebuild(apt));
          89                 :
          90               1 :                 Xapian::Enquire enq(textsearch.db());
          91               2 :                 enq.set_query(textsearch.makeORQuery("sgml"));
          92               1 :                 Xapian::MSet matches = enq.get_mset(0, 100);
          93               1 :                 assert(matches.size() > 0);
          94                 :
          95                 :                 // See if the apt package is among the results
          96               1 :                 set<string> results;
          97              10 :                 for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)
          98              10 :                         results.insert(i.get_document().get_data());
          99               1 :                 assert(results.find("sp") != results.end());
         100               1 :         }
         101                 :
         102                 : // Alternate access using intermediate Xapian::Query objects
         103               1 :         Test queryAccess()
         104                 :         {
         105               1 :                 Xapian::Enquire enq(textsearch.db());
         106               1 :                 enq.set_query(textsearch.makeORQuery("sgml"));
         107               1 :                 Xapian::MSet matches = enq.get_mset(0, 100);
         108               1 :                 assert(matches.size() > 0);
         109                 :
         110                 :                 // See if the apt package is among the results
         111               1 :                 set<string> results;
         112              10 :                 for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)
         113              10 :                         results.insert(i.get_document().get_data());
         114               1 :                 assert(results.find("sp") != results.end());
         115               1 :         }
         116                 :
         117                 : // Try makePartialORQuery
         118               1 :         Test partialOrQuery()
         119                 :         {
         120               1 :                 Xapian::Enquire enq(textsearch.db());
         121               1 :                 enq.set_query(textsearch.makePartialORQuery("sgml"));
         122               1 :                 Xapian::MSet matches = enq.get_mset(0, 100);
         123               1 :                 assert(matches.size() > 0);
         124                 :
         125                 :                 // See if the apt package is among the results
         126               1 :                 set<string> results;
         127              10 :                 for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i)
         128              10 :                         results.insert(i.get_document().get_data());
         129               1 :                 assert(results.find("sp") != results.end());
         130               1 :         }
         131                 :
         132                 : // Try docidByName
         133               1 :         Test docidByName()
         134                 :         {
         135               1 :                 assert(textsearch.docidByName("sp") != 0);
         136               2 :                 assert_eq(textsearch.docidByName("thereisnopackagewiththisname"), 0u);
         137               1 :         }
         138                 :
         139                 : // Access values
         140               1 :         Test values()
         141                 :         {
         142               1 :                 assert(textsearch.hasData());
         143               2 :                 assert(textsearch.timestamp() > 0);
         144               2 :                 assert(!textsearch.needsRebuild(apt));
         145                 :
         146                 :                 double dval;
         147               2 :                 dval = textsearch.getDoubleValue("autoconf", VAL_APT_INSTALLED_SIZE);
         148               2 :                 assert(dval == 2408);
         149               2 :                 dval = textsearch.getDoubleValue("autoconf", VAL_APT_PACKAGE_SIZE);
         150               2 :                 assert(dval == 741486);
         151               2 :                 assert_eq(textsearch.getDoubleValue("thereisnopackagewiththisname", VAL_APT_INSTALLED_SIZE), 0.0);
         152               2 :                 assert_eq(textsearch.getDoubleValue("thereisnopackagewiththisname", VAL_APT_PACKAGE_SIZE), 0.0);
         153                 :
         154                 :                 int val;
         155               2 :                 val = textsearch.getIntValue("autoconf", VAL_APT_INSTALLED_SIZE);
         156               2 :                 assert(val == 2408);
         157               2 :                 val = textsearch.getIntValue("autoconf", VAL_APT_PACKAGE_SIZE);
         158               2 :                 assert(val == 741486);
         159               1 :                 cout << val;
         160               2 :                 assert_eq(textsearch.getIntValue("thereisnopackagewiththisname", VAL_APT_INSTALLED_SIZE), 0);
         161               2 :                 assert_eq(textsearch.getIntValue("thereisnopackagewiththisname", VAL_APT_PACKAGE_SIZE), 0);
         162               1 :         }
         163                 :
         164                 : };
         165                 :
         166                 : // vim:set ts=4 sw=4:

Generated by: LTP GCOV extension version 1.6