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

varsetter.cpp

Blame
  • user avatar
    Adam Wardynski authored
    ce248cb6
    History
    varsetter.cpp 9.21 KiB
    #include <boost/test/unit_test.hpp>
    #include <boost/bind.hpp>
    
    #include <libcorpus2/tagsetmanager.h>
    
    #include <libwccl/ops/functions/bool/varsetter.h>
    #include <libwccl/values/bool.h>
    #include <libwccl/values/tset.h>
    #include <libwccl/values/strset.h>
    #include <libwccl/ops/functions/constant.h>
    
    using namespace Wccl;
    
    BOOST_AUTO_TEST_SUITE(varsetter)
    
    struct VarSetFix
    {
    	VarSetFix()
    		: sc(boost::make_shared<Corpus2::Sentence>()),
    		  cx(sc, boost::make_shared<Variables>()),
    		  tagset(Corpus2::get_named_tagset("kipi"))
    	{
    	}
    	SentenceContext sc;
    	FunExecContext cx;
    	Corpus2::Tagset tagset;
    };
    
    struct VarSetBoolFix : public VarSetFix
    {
    	VarSetBoolFix() 
    		: VarSetFix(),
    		  true_value(true),
    		  false_value(false),
    		  true_constant(new Constant<Bool>(true_value)),
    		  false_constant(new Constant<Bool>(false_value))
    	{
    		cx.variables()->put("True_bool", true_value);
    		cx.variables()->put("False_bool", false_value);
    	}
    	Bool true_value;
    	Bool false_value;
    	boost::shared_ptr<Function<Bool> > true_constant;
    	boost::shared_ptr<Function<Bool> > false_constant;
    };
    
    BOOST_FIXTURE_TEST_CASE(bool_apply, VarSetBoolFix)
    {
    	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
    	VarSetter<Bool> var_setter(acc_t, false_constant);
    	BOOST_CHECK(cx.variables()->get<Bool>("True_bool")->get_value());
    	BOOST_CHECK(var_setter.apply(cx)->get_value());
    	BOOST_CHECK(!false_constant->apply(cx)->get_value());
    	BOOST_CHECK(!cx.variables()->get<Bool>("True_bool")->get_value());
    	VarSetter<Bool> var_setter_2(acc_t, true_constant);
    	BOOST_CHECK(var_setter_2.apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<Bool>("True_bool")->get_value());
    }
    
    BOOST_FIXTURE_TEST_CASE(bool_apply_acc_destruct, VarSetBoolFix)
    {
    	boost::shared_ptr<VarSetter<Bool> > var_setter;
    	{
    		VariableAccessor<Bool> acc_f = cx.variables()->create_accessor<Bool>("False_bool");
    		var_setter.reset(new VarSetter<Bool>(acc_f, true_constant));
    	}
    	BOOST_CHECK(var_setter->apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<Bool>("False_bool")->get_value());
    }
    
    struct VarSetPositionFix : public VarSetFix
    {
    	VarSetPositionFix()
    		: VarSetFix(),
    		  pos_69(69),
    		  nowhere(Position::Nowhere),
    		  pos_69_constant(new Constant<Position>(pos_69)),
    		  nowhere_constant(new Constant<Position>(nowhere))
    	{
    		cx.variables()->put("Nowhere", nowhere);
    		cx.variables()->put("End", Position(Position::End));
    		cx.variables()->put("Pos_69", pos_69);
    	}
    
    	Position pos_69;
    	Position nowhere;
    	boost::shared_ptr<Function<Position> > pos_69_constant;
    	boost::shared_ptr<Function<Position> > nowhere_constant;
    };
    
    BOOST_FIXTURE_TEST_CASE(set_position, VarSetPositionFix)
    {
    	VariableAccessor<Position> acc = cx.variables()->create_accessor<Position>("Nowhere");
    	VarSetter<Position> var_setter(acc, pos_69_constant);
    	BOOST_CHECK(cx.variables()->get<Position>("Nowhere")->equals(nowhere));
    	BOOST_CHECK(var_setter.apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<Position>("Nowhere")->equals(pos_69));
    }
    
    BOOST_FIXTURE_TEST_CASE(set_position_destruct, VarSetPositionFix)
    {
    	boost::shared_ptr<VarSetter<Position> > var_setter;
    	{
    		VariableAccessor<Position> acc = cx.variables()->create_accessor<Position>("Pos_69");
    		var_setter.reset(new VarSetter<Position>(acc, nowhere_constant));
    	}
    	BOOST_CHECK(cx.variables()->get<Position>("Pos_69")->equals(pos_69));
    	BOOST_CHECK(var_setter->apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<Position>("Pos_69")->equals(nowhere));
    }
    
    struct VarSetStrSetFix : public VarSetFix
    {
    	VarSetStrSetFix()
    		: VarSetFix(),
    		  one_elem_set(),
    		  empty_set(),
    		  one_elem_set_constant(),
    		  empty_set_constant(new Constant<StrSet>(empty_set))
    	{
    		one_elem_set.insert_utf8("ThereCanBeOnly1");
    		one_elem_set_constant.reset(new Constant<StrSet>(one_elem_set));
    		cx.variables()->put("OneElemSet", one_elem_set);
    		cx.variables()->put("EmptySet", empty_set);
    	}
    
    	StrSet one_elem_set;
    	StrSet empty_set;
    	boost::shared_ptr<Function<StrSet> > one_elem_set_constant;
    	boost::shared_ptr<Function<StrSet> > empty_set_constant;
    };
    
    BOOST_FIXTURE_TEST_CASE(set_strset, VarSetStrSetFix)
    {
    	VariableAccessor<StrSet> acc = cx.variables()->create_accessor<StrSet>("EmptySet");
    	VarSetter<StrSet> var_setter(acc, one_elem_set_constant);
    	BOOST_CHECK(cx.variables()->get<StrSet>("EmptySet")->equals(empty_set));
    	BOOST_CHECK(var_setter.apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<StrSet>("EmptySet")->equals(one_elem_set));
    }
    
    BOOST_FIXTURE_TEST_CASE(set_strset_destruct, VarSetStrSetFix)
    {
    	boost::shared_ptr<VarSetter<StrSet> > var_setter;
    	{
    		VariableAccessor<StrSet> acc = cx.variables()->create_accessor<StrSet>("OneElemSet");
    		var_setter.reset(new VarSetter<StrSet>(acc, empty_set_constant));
    	}
    	BOOST_CHECK(cx.variables()->get<StrSet>("OneElemSet")->equals(one_elem_set));
    	BOOST_CHECK(var_setter->apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<StrSet>("OneElemSet")->equals(empty_set));
    }
    
    struct VarSetTSetFix : public VarSetFix
    {
    	VarSetTSetFix()
    		: VarSetFix(),
    		  empty_tset(),
    		  subst_pl_tag(),
    		  empty_tset_constant(new Constant<TSet>(empty_tset)),
    		  subst_pl_tag_constant()
    	{
    		subst_pl_tag.insert_symbol(tagset, "subst");
    		subst_pl_tag.insert_symbol(tagset, "pl");
    		subst_pl_tag_constant.reset(new Constant<TSet>(subst_pl_tag));
    		cx.variables()->put("EmptyTag", empty_tset);
    		cx.variables()->put("SubstPl", subst_pl_tag);
    	}
    	
    	TSet empty_tset;
    	TSet subst_pl_tag;
    	boost::shared_ptr<Function<TSet> > empty_tset_constant;
    	boost::shared_ptr<Function<TSet> > subst_pl_tag_constant;
    };
    
    BOOST_FIXTURE_TEST_CASE(set_tset, VarSetTSetFix)
    {
    	VariableAccessor<TSet> acc = cx.variables()->create_accessor<TSet>("EmptyTag");
    	VarSetter<TSet> var_setter(acc, subst_pl_tag_constant);
    	BOOST_CHECK(cx.variables()->get<TSet>("EmptyTag")->equals(empty_tset));
    	BOOST_CHECK(var_setter.apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<TSet>("EmptyTag")->equals(subst_pl_tag));
    }
    
    BOOST_FIXTURE_TEST_CASE(set_TSet_destruct, VarSetTSetFix)
    {
    	boost::shared_ptr<VarSetter<TSet> > var_setter;
    	{
    		VariableAccessor<TSet> acc = cx.variables()->create_accessor<TSet>("SubstPl");
    		var_setter.reset(new VarSetter<TSet>(acc, empty_tset_constant));
    	}
    	BOOST_CHECK(cx.variables()->get<TSet>("SubstPl")->equals(subst_pl_tag));
    	BOOST_CHECK(var_setter->apply(cx)->get_value());
    	BOOST_CHECK(cx.variables()->get<TSet>("SubstPl")->equals(empty_tset));
    }
    
    //----  To String -----
    
    BOOST_FIXTURE_TEST_CASE(bool_varset_to_string, VarSetBoolFix)
    {
    	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
    	VarSetter<Bool> var_setter_t(acc_t, false_constant);
    	std::string expected =
    		"setvar(" + Bool::var_repr("True_bool") + ", False)";
    	BOOST_CHECK_EQUAL(expected, var_setter_t.to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(bool_varset_to_raw_string, VarSetBoolFix)
    {
    	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
    	VarSetter<Bool> var_setter_t(acc_t, false_constant);
    	std::string expected =
    		"setvar(" + Bool::var_repr("True_bool") + ", False)";
    	BOOST_CHECK_EQUAL(expected, var_setter_t.to_raw_string());
    }
    
    BOOST_FIXTURE_TEST_CASE(position_varset_to_string, VarSetPositionFix)
    {
    	VariableAccessor<Position> acc_t = cx.variables()->create_accessor<Position>("Nowhere");
    	VarSetter<Position> var_setter_t(acc_t, pos_69_constant);
    	std::string expected =
    		"setvar(" + Position::var_repr("Nowhere") + ", 69)";
    	BOOST_CHECK_EQUAL(expected, var_setter_t.to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(position_varset_to_raw_string, VarSetPositionFix)
    {
    	VariableAccessor<Position> acc_t = cx.variables()->create_accessor<Position>("End");
    	VarSetter<Position> var_setter_t(acc_t, nowhere_constant);
    	std::string expected =
    		"setvar(" + Position::var_repr("End") + ", nowhere)";
    	BOOST_CHECK_EQUAL(expected, var_setter_t.to_raw_string());
    }
    
    BOOST_FIXTURE_TEST_CASE(StrSet_varset_to_string, VarSetStrSetFix)
    {
    	VariableAccessor<StrSet> acc = cx.variables()->create_accessor<StrSet>("EmptySet");
    	VarSetter<StrSet> var_setter_t(acc, one_elem_set_constant);
    	std::string expected =
    		"setvar(" + StrSet::var_repr("EmptySet") + ", [\"ThereCanBeOnly1\"])";
    	BOOST_CHECK_EQUAL(expected, var_setter_t.to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(StrSet_varset_to_raw_string, VarSetStrSetFix)
    {
    	VariableAccessor<StrSet> acc = cx.variables()->create_accessor<StrSet>("EmptySet");
    	VarSetter<StrSet> var_setter(acc, one_elem_set_constant);
    	std::string expected =
    		"setvar(" + StrSet::var_repr("EmptySet") + ", [\"ThereCanBeOnly1\"])";
    	BOOST_CHECK_EQUAL(expected, var_setter.to_raw_string());
    }
    
    BOOST_FIXTURE_TEST_CASE(tset_varset_to_string, VarSetTSetFix)
    {
    	VariableAccessor<TSet> acc = cx.variables()->create_accessor<TSet>("SubstPl");
    	VarSetter<TSet> var_setter(acc, subst_pl_tag_constant);
    	std::string expected =
    		"setvar(" + TSet::var_repr("SubstPl") + ", " + subst_pl_tag_constant->to_string(tagset) + ")";
    	BOOST_CHECK_EQUAL(expected, var_setter.to_string(tagset));
    }
    
    BOOST_FIXTURE_TEST_CASE(tset_varset_to_raw_string, VarSetTSetFix)
    {
    	VariableAccessor<TSet> acc = cx.variables()->create_accessor<TSet>("SubstPl");
    	VarSetter<TSet> var_setter(acc, subst_pl_tag_constant);
    	std::string expected =
    		"setvar(" + TSet::var_repr("SubstPl") + ", " + subst_pl_tag_constant->to_raw_string() + ")";
    	BOOST_CHECK_EQUAL(expected, var_setter.to_raw_string());
    }
    
    
    BOOST_AUTO_TEST_SUITE_END()