Skip to content
Snippets Groups Projects
vargetter.cpp 2.78 KiB
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>

#include <libwccl/ops/functions/vargetter.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(vargetter)

struct VarGetFix
{
	VarGetFix()
		: sc(boost::make_shared<Corpus2::Sentence>()),
		  cx(sc, boost::make_shared<Variables>()),
		  tagset(),
		  true_value(true),
		  false_value(false),
		  true_constant(true_value),
		  false_constant(false_value)
	{
		cx.variables()->put("True_bool", true_value);
		cx.variables()->put("False_bool", false_value);
	}
	SentenceContext sc;
	FunExecContext cx;
	Corpus2::Tagset tagset;

	Bool true_value;
	Bool false_value;
	Constant<Bool> true_constant;
	Constant<Bool> false_constant;
};

BOOST_FIXTURE_TEST_CASE(bool_apply, VarGetFix)
{
	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
	VarGetter<Bool> var_getter_t(acc_t);
	BOOST_CHECK_EQUAL(true, var_getter_t.apply(cx)->get_value());
	VariableAccessor<Bool> acc_f = cx.variables()->create_accessor<Bool>("False_bool");
	VarGetter<Bool> var_getter_f(acc_f);
	BOOST_CHECK_EQUAL(false, var_getter_f.apply(cx)->get_value());
}

BOOST_FIXTURE_TEST_CASE(bool_apply_acc_destruct, VarGetFix)
{
	boost::shared_ptr<VarGetter<Bool> > var_getter;
	{
		VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
		var_getter.reset(new VarGetter<Bool>(acc_t));
	}
	BOOST_CHECK_EQUAL(true, var_getter->apply(cx)->get_value());
}

BOOST_FIXTURE_TEST_CASE(bool_mod, VarGetFix)
{
	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
	VarGetter<Bool> var_getter_t(acc_t);
	BOOST_CHECK_EQUAL(true, var_getter_t.apply(cx)->get_value());
	cx.variables()->get<Bool>("True_bool")->set_value(false);
	BOOST_CHECK_EQUAL(false, var_getter_t.apply(cx)->get_value());
	cx.variables()->put("True_bool", Bool(true));
	BOOST_CHECK_EQUAL(true, var_getter_t.apply(cx)->get_value());
	cx.variables()->set("True_bool", false_value);
	BOOST_CHECK_EQUAL(false, var_getter_t.apply(cx)->get_value());
	cx.variables()->set("True_bool", Bool(true));
	BOOST_CHECK_EQUAL(true, var_getter_t.apply(cx)->get_value());
}

//----  To String -----

BOOST_FIXTURE_TEST_CASE(bool_varget_to_string, VarGetFix)
{
	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
	VarGetter<Bool> var_getter_t(acc_t);
	BOOST_CHECK_EQUAL(Bool::var_repr("True_bool"), var_getter_t.to_string(tagset));
}

BOOST_FIXTURE_TEST_CASE(bool_varget_to_raw_string, VarGetFix)
{
	VariableAccessor<Bool> acc_t = cx.variables()->create_accessor<Bool>("True_bool");
	VarGetter<Bool> var_getter_t(acc_t);
	BOOST_CHECK_EQUAL(Bool::var_repr("True_bool"), var_getter_t.to_raw_string());
}

BOOST_AUTO_TEST_SUITE_END()