HHu ZhengInit!
b0ae4a8e创建于 3 天前历史提交
#ifdef HAVE_CONFIG_H
#  include "config.h"
#endif

#include <cstdlib>
#include <vector>
#include <utility>
#include <iostream>

#include "lib.h"

static inline bool 
test_analyse_query(const char *s, const std::pair<query_t, std::string>& res)
{
	std::string resstr;
	query_t qt=analyse_query(s, resstr);
	if (qt!=res.first || resstr!=res.second) {
		std::cerr<<"query: "<<s<<std::endl
						 <<"expected: type="<<res.first<<", result="<<res.second<<std::endl
						 <<"get: type="<<qt<<", result="<<resstr<<std::endl;
		return false;
	}

	return true;
}

static inline void
add_analyse_query_test(std::vector<std::pair<std::string, std::pair<query_t, std::string> > >& v, const std::string& s, query_t r, const std::string& rs)
{
	v.push_back(std::pair<std::string, std::pair<query_t, std::string> >(s, std::pair<query_t, std::string>(r, rs)));
}

int main()
{
	std::vector<std::pair<std::string, std::pair<query_t, std::string> > > aq_tests;

	add_analyse_query_test(aq_tests, "/fuzzy", qtFUZZY, "fuzzy");
	add_analyse_query_test(aq_tests, "|data", qtDATA, "data");
	add_analyse_query_test(aq_tests, "\\|data", qtSIMPLE, "|data");
	add_analyse_query_test(aq_tests, "\\/fuzzy", qtSIMPLE, "/fuzzy");
	add_analyse_query_test(aq_tests, "re?ex*", qtPATTERN, "re?ex*");
	add_analyse_query_test(aq_tests, "re\\?ex\\*", qtSIMPLE, "re?ex*");
	add_analyse_query_test(aq_tests, "re?ex\\*", qtPATTERN, "re?ex*");
	add_analyse_query_test(aq_tests, "re\\?ex*", qtPATTERN, "re?ex*");
	add_analyse_query_test(aq_tests, "\\|data\\?", qtSIMPLE, "|data?");
	add_analyse_query_test(aq_tests, "", qtSIMPLE, "");
	add_analyse_query_test(aq_tests, "\\/", qtSIMPLE, "/");
	add_analyse_query_test(aq_tests, "/", qtFUZZY, "");


	for (std::vector<std::pair<std::string, std::pair<query_t, std::string> > >::const_iterator p=aq_tests.begin();
			 p!=aq_tests.end(); ++p)
		if (!test_analyse_query(p->first.c_str(), p->second))		
			return EXIT_FAILURE;
		
	return EXIT_SUCCESS;
}