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

context.cpp

Blame
  • user avatar
    Adam Radziszewski authored
    f2916b4c
    History
    context.cpp 4.34 KiB
    /*
        Copyright (C) 2011 Adam Wardyński, Tomasz Śniatowski, Paweł Kędzia,
        Adam Radziszewski, Bartosz Broda
        Part of the WCCL project
    
        This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the Free
    Software Foundation; either version 3 of the License, or (at your option)
    any later version.
    
        This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    or FITNESS FOR A PARTICULAR PURPOSE. 
    
        See the LICENSE and COPYING files for more details.
    */
    
    #include <boost/test/unit_test.hpp>
    #include <boost/bind.hpp>
    
    #include <libwccl/variables.h>
    #include <libwccl/sentencecontext.h>
    
    #include <iostream>
    
    using namespace Wccl;
    
    BOOST_AUTO_TEST_SUITE(context_position)
    
    BOOST_AUTO_TEST_CASE(contex_init)
    {
    	SentenceContext sc(boost::make_shared<Corpus2::Sentence>());
    	BOOST_CHECK_EQUAL(sc.size(), 0);
    	BOOST_CHECK_EQUAL(sc.get_position(), 0);
    }
    
    struct Fpos
    {
    	Fpos()
    		: sc(boost::make_shared<Corpus2::Sentence>())
    	{
    		using namespace Corpus2;
    		using namespace PwrNlp::Whitespace;
    		sc.get_sentence().append(
    				new Token(UnicodeString::fromUTF8("t1"), Space));
    		sc.get_sentence().append(
    				new Token(UnicodeString::fromUTF8("t2"), Space));
    		sc.get_sentence().append(
    				new Token(UnicodeString::fromUTF8("t3"), Space));
    	}
    
    	SentenceContext sc;
    };
    
    BOOST_FIXTURE_TEST_CASE(scadvance, Fpos)
    {
    	BOOST_CHECK(sc.is_current_inside());
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_position(), 1);
    	BOOST_CHECK(sc.is_current_inside());
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_position(), 2);
    	BOOST_CHECK(sc.is_current_inside());
    	sc.advance();
    	BOOST_CHECK(!sc.is_current_inside());
    	sc.goto_start();
    	BOOST_CHECK(sc.is_current_inside());
    	BOOST_CHECK_EQUAL(sc.get_position(), 0);
    }
    
    BOOST_FIXTURE_TEST_CASE(pos0, Fpos)
    {
    	Position p(0);
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 0);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 1);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 0);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 0);
    	sc.advance();
    	sc.advance();
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    }
    
    BOOST_FIXTURE_TEST_CASE(pos1, Fpos)
    {
    	Position p(1);
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 1);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 1);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 1);
    	sc.advance();
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    }
    
    BOOST_FIXTURE_TEST_CASE(posneg1, Fpos)
    {
    	Position p(-1);
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -1);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 1);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -1);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -1);
    	sc.advance();	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    }
    
    BOOST_FIXTURE_TEST_CASE(pos_begin, Fpos)
    {
    	Position p(Position::Begin);
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 0);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -1);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -2);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 0);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -3);
    }
    
    BOOST_FIXTURE_TEST_CASE(pos_end, Fpos)
    {
    	Position p(Position::End);
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 2);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 1);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), 0);
    	sc.advance();
    	BOOST_CHECK_EQUAL(sc.get_abs_position(p), 2);
    	BOOST_CHECK_EQUAL(sc.get_rel_position(p), -1);
    }
    
    BOOST_FIXTURE_TEST_CASE(pos_no, Fpos)
    {
    	Position p(Position::Nowhere);
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    	sc.advance();
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    	sc.advance();
    	BOOST_CHECK(!sc.is_inside(sc.get_abs_position(p)));
    }
    
    
    BOOST_AUTO_TEST_SUITE_END()