Skip to content
Snippets Groups Projects
getsymbols.cpp 4.44 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>
#include <libwccl/ops/functions/tset/getwordclass.h>
ilor's avatar
ilor committed

#include "optest.h"

ilor's avatar
ilor committed
using namespace Wccl;

BOOST_AUTO_TEST_SUITE(get_symbols_op)

struct SymbolsFix : public Wccl::PositionFixture
ilor's avatar
ilor committed
{
	SymbolsFix()
		: Wccl::PositionFixture(),
		  s(boost::make_shared<Corpus2::Sentence>()),
ilor's avatar
ilor committed
		  sc(s),
		  tagset(Corpus2::get_named_tagset("kipi")),
		  cx(sc, boost::make_shared<Variables>())
ilor's avatar
ilor committed
	{
		Corpus2::Token* the_token = new Corpus2::Token(
				"One",
				PwrNlp::Whitespace::ManySpaces);
		Corpus2::Lexeme l1("aaa", tagset.parse_simple_tag("subst:sg:nom:m1"));
		Corpus2::Lexeme l2("aaa", tagset.parse_simple_tag("subst:sg:nom:m2"));
ilor's avatar
ilor committed
		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"));
		Corpus2::Lexeme l4("aaa", tagset.parse_simple_tag("prep:nom:wok"));
		Corpus2::Lexeme l5("aaa", tagset.parse_simple_tag("adja"));
ilor's avatar
ilor committed
		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");
		tag_pos.set_pos(Corpus2::filled_mask);
ilor's avatar
ilor committed
	}

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

	FunExecContext cx;
	TSet empty;
	Corpus2::Tag gnd;
	Corpus2::Tag nmb;
	Corpus2::Tag vcl;
	Corpus2::Tag tag_pos;
ilor's avatar
ilor committed
};

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

BOOST_FIXTURE_TEST_CASE(symbols_outside, SymbolsFix)
{
	GetSymbols symbols(gnd, pos(-1));
	BOOST_CHECK(symbols.apply(cx)->equals(empty));
}

ilor's avatar
ilor committed
BOOST_FIXTURE_TEST_CASE(get_gnd, SymbolsFix)
{
	GetSymbols symbols(gnd, pos(0));
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(0));
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(0));
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_tag_pos, SymbolsFix)
ilor's avatar
ilor committed
{
	GetSymbols symbols(tag_pos, pos(0));
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_FIXTURE_TEST_CASE(get_symbols_to_string, SymbolsFix)
{
	GetSymbols symbols(nmb, pos(0));
	BOOST_CHECK_EQUAL("nmb[0]", symbols.to_string(tagset));
}

BOOST_FIXTURE_TEST_CASE(get_symbols_to_raw_string, SymbolsFix)
{
	GetSymbols symbols(nmb, pos(0));
	std::string expected = nmb.raw_dump() + "[0]";
	BOOST_CHECK_EQUAL(expected, symbols.to_raw_string());
}

//
//  ---------- GetWordClass cases ----------
//

BOOST_FIXTURE_TEST_CASE(get_word_class, SymbolsFix)
{
	GetWordClass wclass(pos(0));
	BOOST_CHECK_EQUAL(wclass.apply(cx)->to_string(tagset), "{subst}");
	sc.advance();
	BOOST_CHECK_EQUAL(wclass.apply(cx)->to_string(tagset), "{adja,prep,subst}");
	sc.advance();
	BOOST_CHECK_EQUAL(wclass.apply(cx)->to_string(tagset), "{}");
}

BOOST_FIXTURE_TEST_CASE(get_word_class_to_string, SymbolsFix)
{
	GetWordClass wclass(pos(0));
	BOOST_CHECK_EQUAL("class[0]", wclass.to_string(tagset));
}

BOOST_FIXTURE_TEST_CASE(get_word_class_to_raw_string, SymbolsFix)
{
	GetWordClass wclass(pos(0));
	BOOST_CHECK_EQUAL("class[0]", wclass.to_raw_string());
ilor's avatar
ilor committed

BOOST_AUTO_TEST_SUITE_END()