Skip to content
Snippets Groups Projects
strsetfunctions.cpp 4.72 KiB
Newer Older
Adam Wardyński's avatar
Adam Wardyński committed
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <libcorpus2/sentence.h>


#include <libwccl/values/strset.h>
#include <libwccl/sentencecontext.h>
#include <libwccl/ops/tolower.h>
#include <libwccl/ops/toupper.h>
Adam Wardyński's avatar
Adam Wardyński committed
#include <libwccl/ops/constant.h>

using namespace Wccl;

BOOST_AUTO_TEST_SUITE(strset_functions)

struct StrSetFix
{
	StrSetFix()
		: sc(boost::make_shared<Corpus2::Sentence>()),
		  tagset(),
		  strset(),
		  strset_expr()
	{
		strset.insert("alllower");
		strset.insert("Firstcapital");
		strset.insert("PascalCase");
		strset.insert("camelCase");
		strset.insert("some1325numbers");
		strset.insert("ALLUPPER");
		strset.insert("kIdSpEeChLoL");

		strset_expr.reset(new Constant<StrSet>(strset));
	}
	SentenceContext sc;
	Corpus2::Tagset tagset;

	StrSet strset;
	boost::shared_ptr<Function<StrSet> > strset_expr;
};

BOOST_FIXTURE_TEST_CASE(lower, StrSetFix)
{
	StrSet lowerset;
	lowerset.insert("alllower");
	lowerset.insert("firstcapital");
	lowerset.insert("pascalcase");
	lowerset.insert("camelcase");
	lowerset.insert("some1325numbers");
	lowerset.insert("allupper");
	lowerset.insert("kidspeechlol");

	ToLower to_lower(strset_expr);

	BOOST_CHECK(lowerset.equals(*to_lower.apply(sc)));
}

BOOST_FIXTURE_TEST_CASE(lower_locale, StrSetFix)
{
	//I'm not sure if I can guarantee this test will pass
	//on all locales? - ToLower uses default locale at the moment

	//I wanted to make sure switching around encoding of source file
	//won't affect the test, so I explicitly provide escaped UTF8 sequence

	StrSet upperset;
	upperset.insert(UnicodeString::fromUTF8(
		"za\xC5\xBB\xC3\x93\xC5\x81\xC4\x86g\xC4\x98\xC5\x9AL\xC4\x84ja\xC5\xB9\xC5\x83"
		"zA\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87g\xC4\x99\xC5\x9Bl\xC4\x85ja\xC5\xBA\xC5\x84"));
	StrSet lowerset;
	lowerset.insert(UnicodeString::fromUTF8(
		"za\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87g\xC4\x99\xC5\x9Bl\xC4\x85ja\xC5\xBA\xC5\x84"
		"za\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87g\xC4\x99\xC5\x9Bl\xC4\x85ja\xC5\xBA\xC5\x84"));

	ToLower to_lower(boost::shared_ptr<Function<StrSet> >(
		new Constant<StrSet>(upperset)));

	BOOST_CHECK(lowerset.equals(*to_lower.apply(sc)));
}

BOOST_FIXTURE_TEST_CASE(upper_locale, StrSetFix)
{
	//I'm not sure if I can guarantee this test will pass
	//on all locales? - ToUpper uses default locale at the moment

	//I wanted to make sure switching around encoding of source file
	//won't affect the test, so I explicitly provide escaped UTF8 sequence

	StrSet upperset;
	upperset.insert(UnicodeString::fromUTF8(
		"ZA\xC5\xBB\xC3\x93\xC5\x81\xC4\x86G\xC4\x98\xC5\x9AL\xC4\x84JA\xC5\xB9\xC5\x83"
		"ZA\xC5\xBB\xC3\x93\xC5\x81\xC4\x86G\xC4\x98\xC5\x9AL\xC4\x84JA\xC5\xB9\xC5\x83"));
	StrSet lowerset;
	lowerset.insert(UnicodeString::fromUTF8(
		"za\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87g\xC4\x99\xC5\x9Bl\xC4\x85ja\xC5\xBA\xC5\x84"
		"ZA\xC5\xBB\xC3\x93\xC5\x81\xC4\x86g\xC4\x98\xC5\x9AL\xC4\x84JA\xC5\xB9\xC5\x83"));

	ToUpper to_upper(boost::shared_ptr<Function<StrSet> >(
		new Constant<StrSet>(lowerset)));

	BOOST_CHECK(upperset.equals(*to_upper.apply(sc)));
}
BOOST_FIXTURE_TEST_CASE(lower_empty, StrSetFix)
{
	StrSet emptyset;

	ToLower to_lower(boost::shared_ptr<Function<StrSet> >(
		new Constant<StrSet>(emptyset)));

	BOOST_CHECK(emptyset.equals(*to_lower.apply(sc)));
}

BOOST_FIXTURE_TEST_CASE(upper_empty, StrSetFix)
{
	StrSet emptyset;

	ToUpper to_upper(boost::shared_ptr<Function<StrSet> >(
		new Constant<StrSet>(emptyset)));

	BOOST_CHECK(emptyset.equals(*to_upper.apply(sc)));
}

Adam Wardyński's avatar
Adam Wardyński committed
//------ to_string test cases -------

BOOST_FIXTURE_TEST_CASE(lower_to_string, StrSetFix)
{
	StrSet one_elem_set;
	one_elem_set.insert("YayaAy");
	ToLower to_lower(boost::shared_ptr<Function<StrSet> >(
			new Constant<StrSet>(one_elem_set)));
	std::string expected = "lower([\"YayaAy\"])";
	BOOST_CHECK_EQUAL(expected, to_lower.to_string(tagset));
}

BOOST_AUTO_TEST_CASE(lower_to_raw_string)
{
	StrSet one_elem_set;
	one_elem_set.insert("YayaAy");
	ToLower to_lower(boost::shared_ptr<Function<StrSet> >(
			new Constant<StrSet>(one_elem_set)));
	std::string expected = "lower([\"YayaAy\"])";
	BOOST_CHECK_EQUAL(expected, to_lower.to_raw_string());
}

BOOST_FIXTURE_TEST_CASE(upper_to_string, StrSetFix)
{
	StrSet one_elem_set;
	one_elem_set.insert("YayaAy");
	ToUpper to_upper(boost::shared_ptr<Function<StrSet> >(
			new Constant<StrSet>(one_elem_set)));
	std::string expected = "upper([\"YayaAy\"])";
	BOOST_CHECK_EQUAL(expected, to_upper.to_string(tagset));
}

BOOST_AUTO_TEST_CASE(upper_to_raw_string)
{
	StrSet one_elem_set;
	one_elem_set.insert("YayaAy");
	ToUpper to_upper(boost::shared_ptr<Function<StrSet> >(
			new Constant<StrSet>(one_elem_set)));
	std::string expected = "upper([\"YayaAy\"])";
	BOOST_CHECK_EQUAL(expected, to_upper.to_raw_string());
}

Adam Wardyński's avatar
Adam Wardyński committed
BOOST_AUTO_TEST_SUITE_END()