Skip to content
Snippets Groups Projects
mark.cpp 5.06 KiB
Newer Older
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>
#include <libcorpus2/ann/annotatedsentence.h>
#include <libwccl/ops/functions/constant.h>

#include <libwccl/ops/tagactions/mark.h>

using namespace Wccl;

BOOST_AUTO_TEST_SUITE(mark)

struct MarkFix
{
	MarkFix()
		: as(boost::make_shared<Corpus2::AnnotatedSentence>()),
		sc(as),
		cx(sc, boost::make_shared<Variables>()),
		pos_zero(0),
		pos_one(1),
		pos_minus_one(-1),
		nowhere(Position::Nowhere),
		begin(Position::Begin),
		end(Position::End),
		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)),
		begin_constant(new Constant<Position>(begin)),
		end_constant(new Constant<Position>(end))
	{
		as->append(new Corpus2::Token(UnicodeString::fromUTF8("t1"), PwrNlp::Whitespace::Newline));
		as->append(new Corpus2::Token(UnicodeString::fromUTF8("t2"), PwrNlp::Whitespace::Newline));
		as->append(new Corpus2::Token(UnicodeString::fromUTF8("t3"), PwrNlp::Whitespace::Newline));
		as->append(new Corpus2::Token(UnicodeString::fromUTF8("t4"), PwrNlp::Whitespace::Newline));
		as->append(new Corpus2::Token(UnicodeString::fromUTF8("t5"), PwrNlp::Whitespace::Newline));
		as->create_channel("ch1");
		as->get_channel("ch1").set_segment_at(2, 1);
		as->get_channel("ch1").set_segment_at(3, 1);
		as->get_channel("ch1").set_head_at(3, true);
	}

	boost::shared_ptr<Corpus2::AnnotatedSentence> as;
	SentenceContext sc;
	Corpus2::Tagset tagset;
	ActionExecContext cx;

	Position pos_zero;
	Position pos_one;
	Position pos_minus_one;
	Position nowhere;
	Position begin;
	Position end;
	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> > begin_constant;
	boost::shared_ptr<Function<Position> > end_constant;
};

BOOST_FIXTURE_TEST_CASE(mark_empty, MarkFix)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> as_clone = boost::dynamic_pointer_cast<Corpus2::AnnotatedSentence>(as->clone_shared());
	Mark mark(pos_minus_one_constant, pos_minus_one_constant, "ch1");
	BOOST_CHECK(!mark.execute(cx));
	//BOOST_CHECK((*as) == (*as_clone));
	BOOST_CHECK_EQUAL(as->get_channel("ch1").dump_alpha(), "__aA_");
}

BOOST_FIXTURE_TEST_CASE(mark_already_there, MarkFix)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> as_clone = boost::dynamic_pointer_cast<Corpus2::AnnotatedSentence>(as->clone_shared());
	sc.set_position(1);
	Mark mark(begin_constant, pos_one_constant, "ch1");
	BOOST_CHECK(!mark.execute(cx));
	BOOST_CHECK_EQUAL(as->get_channel("ch1").dump_alpha(), "__aA_");
}

BOOST_FIXTURE_TEST_CASE(mark_begin, MarkFix)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> as_clone = boost::dynamic_pointer_cast<Corpus2::AnnotatedSentence>(as->clone_shared());
	sc.set_position(1);
	Mark mark(begin_constant, pos_minus_one_constant, "ch1");
	BOOST_CHECK(mark.execute(cx));
	BOOST_CHECK_EQUAL(as->get_channel("ch1").dump_alpha(), "B_aA_");
}

BOOST_FIXTURE_TEST_CASE(mark_begin_head0, MarkFix)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> as_clone = boost::dynamic_pointer_cast<Corpus2::AnnotatedSentence>(as->clone_shared());
	sc.set_position(0);
	Mark mark(begin_constant, pos_one_constant, pos_zero_constant, "ch1");
	BOOST_CHECK(mark.execute(cx));
	BOOST_CHECK_EQUAL(as->get_channel("ch1").dump_alpha(), "BbaA_");
}

BOOST_FIXTURE_TEST_CASE(mark_begin_head1, MarkFix)
{
	boost::shared_ptr<Corpus2::AnnotatedSentence> as_clone = boost::dynamic_pointer_cast<Corpus2::AnnotatedSentence>(as->clone_shared());
	sc.set_position(0);
	Mark mark(begin_constant, pos_one_constant, pos_one_constant, "ch1");
	BOOST_CHECK(mark.execute(cx));
	BOOST_CHECK_EQUAL(as->get_channel("ch1").dump_alpha(), "bBaA_");
}

BOOST_FIXTURE_TEST_CASE(mark_other, MarkFix)
{
	sc.set_position(1);
	Mark mark(begin_constant, pos_one_constant, begin_constant, "ch2");
	BOOST_CHECK(mark.execute(cx));
	BOOST_CHECK_EQUAL(as->get_channel("ch2").dump_alpha(), "Aaa__");
}


//------ to_string test cases -------

BOOST_FIXTURE_TEST_CASE(mark_to_string, MarkFix)
{
	Mark mark(begin_constant, end_constant, "ch");
	BOOST_CHECK_EQUAL("mark(begin, end, \"ch\")", mark.to_string(tagset));
	Mark mark2(begin_constant, pos_one_constant, "ch2");
	BOOST_CHECK_EQUAL("mark(begin, 1, \"ch2\")", mark2.to_string(tagset));
	Mark mark3(pos_minus_one_constant, end_constant, "ch3");
	BOOST_CHECK_EQUAL("mark(-1, end, \"ch3\")", mark3.to_string(tagset));
}

BOOST_FIXTURE_TEST_CASE(mark_to_string_head, MarkFix)
	{
	Mark mark(begin_constant, end_constant, pos_one_constant, "ch");
	BOOST_CHECK_EQUAL("mark(begin, end, 1, \"ch\")", mark.to_string(tagset));
	Mark mark2(begin_constant, pos_one_constant, pos_zero_constant, "ch2");
	BOOST_CHECK_EQUAL("mark(begin, 1, 0, \"ch2\")", mark2.to_string(tagset));
	Mark mark3(pos_minus_one_constant, end_constant, end_constant, "ch3");
	BOOST_CHECK_EQUAL("mark(-1, end, end, \"ch3\")", mark3.to_string(tagset));
}

BOOST_AUTO_TEST_SUITE_END()