Newer
Older
#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>
using namespace Wccl;
BOOST_AUTO_TEST_SUITE(get_symbols_op)
struct SymbolsFix : public Wccl::PositionFixture
: Wccl::PositionFixture(),
s(boost::make_shared<Corpus2::Sentence>()),
cx(sc, boost::make_shared<Variables>())
{
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"));
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"));
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);
}
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;
};
BOOST_FIXTURE_TEST_CASE(symbols_nowhere, SymbolsFix)
{
GetSymbols symbols(gnd, nowhere());
GetSymbols s3(tag_pos, nowhere());
BOOST_FIXTURE_TEST_CASE(symbols_outside, SymbolsFix)
{
BOOST_CHECK(symbols.apply(cx)->equals(empty));
}
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)
{
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)
{
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)
GetSymbols symbols(tag_pos, pos(0));
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)
{
BOOST_CHECK_EQUAL("nmb[0]", symbols.to_string(tagset));
}
BOOST_FIXTURE_TEST_CASE(get_symbols_to_raw_string, SymbolsFix)
{
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)
{
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)
{
BOOST_CHECK_EQUAL("class[0]", wclass.to_string(tagset));
}
BOOST_FIXTURE_TEST_CASE(get_word_class_to_raw_string, SymbolsFix)
{
BOOST_CHECK_EQUAL("class[0]", wclass.to_raw_string());