Skip to content
Snippets Groups Projects
Select Git revision
  • 11e590fa32a9ecfafbe9be666769019889318ab4
  • master default protected
  • fix-words-ann
  • wccl-rules-migration
  • develop
5 results

isempty.h

Blame
  • getsymbolsinrange.cpp 5.19 KiB
    #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/getsymbolsinrange.h>
    
    using namespace Wccl;
    
    BOOST_AUTO_TEST_SUITE(get_symbols_in_range_op)
    
    struct SymbolsInRangeFix
    {
    	SymbolsInRangeFix()
    		: s(boost::make_shared<Corpus2::Sentence>()),
    		  sc(s),
    		  tagset(Corpus2::get_named_tagset("kipi")),
    		  cx(sc, boost::make_shared<Variables>()),
    		  pos_zero(0),
    		  pos_one(1),
    		  pos_minus_one(-1),
    		  nowhere(Position::Nowhere),
    		  pos_zero_constant(new Constant<Position>(pos_zero)),
    		  pos_one_constant(new Constant<Position>(pos_one)),
    		  pos_minus_one_constant(new Constant<Position>(pos_minus_one)),
    		  nowhere_constant(new Constant<Position>(nowhere)),
    		  pos_plus_2_constant(new Constant<Position>(Position(2))),
    		  pos_minus_2_constant(new Constant<Position>(Position(-2)))
    	{
    		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");
    	}
    
    	boost::shared_ptr<Corpus2::Sentence> s;
    	SentenceContext sc;
    	const Corpus2::Tagset& tagset;
    
    	FunExecContext cx;
    	Position pos_zero;
    	Position pos_one;
    	Position pos_minus_one;
    	Position nowhere;
    	boost::shared_ptr<Function<Position> > pos_zero_constant;
    	boost::shared_ptr<Function<Position> > pos_one_constant;
    	boost::shared_ptr<Function<Position> > pos_minus_one_constant;
    	boost::shared_ptr<Function<Position> > nowhere_constant;
    	boost::shared_ptr<Function<Position> > pos_plus_2_constant;
    	boost::shared_ptr<Function<Position> > pos_minus_2_constant;
    	TSet empty;
    	Corpus2::Tag gnd;
    	Corpus2::Tag nmb;
    	Corpus2::Tag vcl;
    	Corpus2::Tag pos;
    };
    
    BOOST_FIXTURE_TEST_CASE(range_nowhere, SymbolsInRangeFix)
    {
    	for(int i = 0; i < 3; i++)
    	{
    		GetSymbolsInRange range(gnd, nowhere_constant, pos_zero_constant);
    		BOOST_CHECK(range.apply(cx)->equals(empty));
    		GetSymbolsInRange r2(gnd, pos_zero_constant, nowhere_constant);
    		BOOST_CHECK(r2.apply(cx)->equals(empty));
    		GetSymbolsInRange r3(gnd, nowhere_constant, nowhere_constant);
    		BOOST_CHECK(r3.apply(cx)->equals(empty));
    		sc.advance();
    	}
    }
    
    BOOST_FIXTURE_TEST_CASE(range_outside, SymbolsInRangeFix)
    {
    	GetSymbolsInRange range(gnd, pos_minus_2_constant, pos_minus_one_constant);
    	BOOST_CHECK(range.apply(cx)->equals(empty));
    	sc.advance();
    	GetSymbolsInRange r2(gnd, pos_one_constant, pos_plus_2_constant);
    	BOOST_CHECK(r2.apply(cx)->equals(empty));
    }
    
    BOOST_FIXTURE_TEST_CASE(range_valid_including_trimmed, SymbolsInRangeFix)
    {
    	GetSymbolsInRange range(gnd, pos_minus_2_constant, pos_zero_constant);
    	BOOST_CHECK_EQUAL("{m1,m2}", range.apply(cx)->to_string(tagset));
    	GetSymbolsInRange r2(gnd, pos_minus_one_constant, pos_zero_constant);
    	BOOST_CHECK_EQUAL("{m1,m2}", r2.apply(cx)->to_string(tagset));
    	GetSymbolsInRange r3(gnd, pos_one_constant, pos_plus_2_constant);
    	BOOST_CHECK_EQUAL("{f}", r3.apply(cx)->to_string(tagset));
    	GetSymbolsInRange r4(gnd, pos_zero_constant, pos_plus_2_constant);
    	BOOST_CHECK_EQUAL("{m1,m2,f}", r4.apply(cx)->to_string(tagset));
    	sc.advance();
    	BOOST_CHECK_EQUAL("{m1,m2,f}", range.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{m1,m2,f}", r2.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{}", r3.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{f}", r4.apply(cx)->to_string(tagset));
    	sc.advance();
    	BOOST_CHECK_EQUAL("{m1,m2,f}", range.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{f}", r2.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{}", r3.apply(cx)->to_string(tagset));
    	BOOST_CHECK_EQUAL("{}", r4.apply(cx)->to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(range_same_token, SymbolsInRangeFix)
    {
    	GetSymbolsInRange range(gnd, pos_zero_constant, pos_zero_constant);
    	BOOST_CHECK_EQUAL("{m1,m2}", range.apply(cx)->to_string(tagset));
    	sc.advance();
    	BOOST_CHECK_EQUAL("{f}", range.apply(cx)->to_string(tagset));
    	sc.advance();
    	BOOST_CHECK_EQUAL("{}", range.apply(cx)->to_string(tagset));
    }
    
    
    BOOST_FIXTURE_TEST_CASE(range_to_string, SymbolsInRangeFix)
    {
    	GetSymbolsInRange range(gnd, pos_zero_constant, pos_plus_2_constant);
    	BOOST_CHECK_EQUAL("range(gnd, 0, 2)", range.to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(range_to_raw_string, SymbolsInRangeFix)
    {
    	GetSymbolsInRange range(gnd, pos_zero_constant, pos_plus_2_constant);
    	std::string expected = "range(" + gnd.raw_dump() + ", 0, 2)";
    	BOOST_CHECK_EQUAL(expected, range.to_raw_string());
    }
    
    BOOST_AUTO_TEST_SUITE_END()