Skip to content
Snippets Groups Projects
match.cpp 4.49 KiB
Newer Older
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>
#include <libcorpus2/tagsetmanager.h>

#include <libwccl/sentencecontext.h>
#include <libwccl/variables.h>

#include <libwccl/values/match.h>
#include <iostream>

using namespace Wccl;

BOOST_AUTO_TEST_SUITE(match_value)

BOOST_AUTO_TEST_CASE(empty)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> ptr;
	Wccl::Match m;
	BOOST_CHECK(m.empty());
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH()");
}

BOOST_AUTO_TEST_CASE(token)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> ptr;
	Wccl::TokenMatch m(1);
	BOOST_CHECK(!m.empty());
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), 1);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), 1);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "TOK[1]");
}

BOOST_AUTO_TEST_CASE(vector1)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> ptr;
	Wccl::MatchVector m;
	BOOST_CHECK(m.empty());
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH()");
	m.append(boost::make_shared<Wccl::MatchVector>());
	BOOST_CHECK(m.empty());
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH(MATCH())");
	m.append(boost::make_shared<Wccl::MatchVector>());
	BOOST_CHECK(m.empty());
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH(MATCH(),MATCH())");
	Wccl::MatchVector m2;
	m2.append(boost::make_shared<Wccl::MatchVector>(m));
	BOOST_CHECK(m2.empty());
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m2.to_raw_string(), "MATCH(MATCH(MATCH(),MATCH()))");
	m2.append(boost::make_shared<Wccl::MatchVector>());
	BOOST_CHECK(m2.empty());
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), Wccl::Position::Nowhere);
	BOOST_CHECK_EQUAL(m2.to_raw_string(), "MATCH(MATCH(MATCH(),MATCH()),MATCH())");
}

BOOST_AUTO_TEST_CASE(matchvector_first_last)
	boost::shared_ptr<Corpus2::AnnotatedSentence> ptr;
	Wccl::MatchVector m;
	m.append(boost::make_shared<TokenMatch>(5));
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH(TOK[5])");
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), 5);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), 5);
	m.append(boost::make_shared<TokenMatch>(6));
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), 5);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), 6);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH(TOK[5],TOK[6])");
	m.append(boost::make_shared<TokenMatch>(4));
	BOOST_CHECK_EQUAL(m.first_token(ptr).get_value(), 4);
	BOOST_CHECK_EQUAL(m.last_token(ptr).get_value(), 6);
	BOOST_CHECK_EQUAL(m.to_raw_string(), "MATCH(TOK[5],TOK[6],TOK[4])");
	Wccl::MatchVector m2;
	m2.append(boost::make_shared<TokenMatch>(5));
	boost::shared_ptr<Wccl::MatchVector> m1 = boost::make_shared<Wccl::MatchVector>(m);
	m2.append(m1);
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), 4);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), 6);
	BOOST_CHECK_EQUAL(m2.to_raw_string(), "MATCH(TOK[5],MATCH(TOK[5],TOK[6],TOK[4]))");
	m2.append(boost::make_shared<TokenMatch>(2));
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), 2);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), 6);
	m2.append(boost::make_shared<TokenMatch>(7));
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), 2);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), 7);
	m1->append(boost::make_shared<TokenMatch>(1));
	BOOST_CHECK_EQUAL(m2.first_token(ptr).get_value(), 1);
	BOOST_CHECK_EQUAL(m2.last_token(ptr).get_value(), 7);
	boost::shared_ptr<Corpus2::AnnotatedSentence> ptr;
	v.put<Wccl::Match>("a", new Wccl::Match(boost::shared_ptr<MatchData>(new Wccl::TokenMatch(1))));
	BOOST_CHECK_EQUAL(v.get<Wccl::Match>("a")->first_token(ptr).get_value(), 1);
	BOOST_CHECK(v.get_put<Wccl::Match>("b")->empty());
	BOOST_CHECK_EQUAL(v.get_put<Wccl::Match>("b")->first_token(ptr).get_value(),