Skip to content
Snippets Groups Projects
getsymbols.cpp 3.53 KiB
Newer Older
ilor's avatar
ilor committed
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <libcorpus2/sentence.h>
#include <libcorpus2/tagsetmanager.h>

#include <libwccl/ops/functions/constant.h>
#include <libwccl/ops/functions/tset/getsymbols.h>

using namespace Wccl;

BOOST_AUTO_TEST_SUITE(get_symbols_op)

struct SymbolsFix
{
	SymbolsFix()
		: s(boost::make_shared<Corpus2::Sentence>()),
		  sc(s),
		  tagset(Corpus2::get_named_tagset("kipi")),
		  cx(sc, boost::make_shared<Variables>()),
		  pos_zero(0),
		  nowhere(Position::Nowhere),
		  pos_zero_constant(new Constant<Position>(pos_zero)),
		  nowhere_constant(new Constant<Position>(nowhere))
	{
		Corpus2::Token* the_token = new Corpus2::Token(
				"One",
				PwrNlp::Whitespace::ManySpaces);
		Corpus2::Lexeme l1("aaa", tagset.parse_simple_tag("subst:sg:nom:m1", false));
		Corpus2::Lexeme l2("aaa", tagset.parse_simple_tag("subst:sg:nom:m2", false));
		the_token->add_lexeme(l1);
		the_token->add_lexeme(l2);
		s->append(the_token);
		Corpus2::Token* another_token = new Corpus2::Token(
				"Two",
				PwrNlp::Whitespace::ManySpaces);
		Corpus2::Lexeme l3("aaa", tagset.parse_simple_tag("subst:pl:dat:f", false));
		Corpus2::Lexeme l4("aaa", tagset.parse_simple_tag("prep:nom:wok", false));
		Corpus2::Lexeme l5("aaa", tagset.parse_simple_tag("adja", false));
		another_token->add_lexeme(l3);
		another_token->add_lexeme(l4);
		another_token->add_lexeme(l5);
		s->append(another_token);
		gnd = tagset.parse_symbol("gnd");
		nmb = tagset.parse_symbol("nmb");
		vcl = tagset.parse_symbol("vcl");
		pos.set_pos(-1); //todo
ilor's avatar
ilor committed
	}

	boost::shared_ptr<Corpus2::Sentence> s;
	SentenceContext sc;
	const Corpus2::Tagset& tagset;

	FunExecContext cx;
	Position pos_zero;
	Position nowhere;
	boost::shared_ptr<Function<Position> > pos_zero_constant;
	boost::shared_ptr<Function<Position> > nowhere_constant;
	TSet empty;
	Corpus2::Tag gnd;
	Corpus2::Tag nmb;
	Corpus2::Tag vcl;
	Corpus2::Tag pos;
};

BOOST_FIXTURE_TEST_CASE(symbols_nowhere, SymbolsFix)
{
	GetSymbols symbols(gnd, nowhere_constant);
ilor's avatar
ilor committed
	BOOST_CHECK(symbols.apply(cx)->equals(empty));
	GetSymbols s2(nmb, nowhere_constant);
ilor's avatar
ilor committed
	BOOST_CHECK(s2.apply(cx)->equals(empty));
	GetSymbols s3(pos, nowhere_constant);
ilor's avatar
ilor committed
	BOOST_CHECK(s3.apply(cx)->equals(empty));
}

BOOST_FIXTURE_TEST_CASE(get_gnd, SymbolsFix)
{
	GetSymbols symbols(gnd, pos_zero_constant);
ilor's avatar
ilor committed
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{m1,m2}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{f}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{}");
}

BOOST_FIXTURE_TEST_CASE(get_nmb, SymbolsFix)
{
	GetSymbols symbols(nmb, pos_zero_constant);
ilor's avatar
ilor committed
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{sg}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{pl}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{}");
}

BOOST_FIXTURE_TEST_CASE(get_vcl, SymbolsFix)
{
	GetSymbols symbols(vcl, pos_zero_constant);
ilor's avatar
ilor committed
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{wok}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{}");
}

BOOST_FIXTURE_TEST_CASE(get_pos, SymbolsFix)
{
	GetSymbols symbols(pos, pos_zero_constant);
ilor's avatar
ilor committed
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{subst}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{adja,prep,subst}");
	sc.advance();
	BOOST_CHECK_EQUAL(symbols.apply(cx)->to_string(tagset), "{}");
}


BOOST_AUTO_TEST_SUITE_END()