An error occurred while loading the file. Please try again.
-
Adam Wardynski authored9a8067ae
values.cpp 6.24 KiB
#include <boost/test/unit_test.hpp>
#include <boost/bind.hpp>
#include <libcorpus2/tagsetmanager.h>
#include <libwccl/sentencecontext.h>
#include <libwccl/variables.h>
#include <libwccl/values/tset.h>
#include <libwccl/values/strset.h>
#include <iostream>
using namespace Wccl;
BOOST_AUTO_TEST_SUITE(values)
BOOST_AUTO_TEST_CASE(boolz)
{
Bool b;
BOOST_CHECK_EQUAL(b.get_value(), false);
Value& v = b;
BOOST_CHECK_EQUAL(v.get_type_name(), Bool::type_name);
}
BOOST_AUTO_TEST_CASE(tsetz)
{
TSet t;
BOOST_CHECK(t.get_value().is_null());
Value& v = t;
BOOST_CHECK_EQUAL(v.get_type_name(), TSet::type_name);
}
BOOST_AUTO_TEST_CASE(positionz)
{
Position p;
BOOST_CHECK(p.get_value() == Position::Nowhere);
Value& v = p;
BOOST_CHECK_EQUAL(v.get_type_name(), Position::type_name);
}
BOOST_AUTO_TEST_CASE(strset_ops)
{
StrSet s1, s2;
BOOST_CHECK(s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
s1.insert_utf8("aaa");
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(!s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
s2.insert_utf8("bbb");
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(!s1.is_subset_of(s2));
BOOST_CHECK(!s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
s2.insert_utf8("aaa");
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(!s2.is_subset_of(s1));
BOOST_CHECK(s1.intersects(s2));
s1.insert_utf8("bbb");
BOOST_CHECK(s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(s1.intersects(s2));
}
BOOST_AUTO_TEST_CASE(tset_ops)
{
TSet s1, s2;
const Corpus2::Tagset& tagset = Corpus2::get_named_tagset("kipi");
Corpus2::Tag subst_tag = tagset.parse_simple_tag("subst:sg:nom:f");
Corpus2::Tag adj_tag = tagset.parse_simple_tag("adj:pl:acc:m3:pos");
BOOST_CHECK(s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
BOOST_CHECK_EQUAL(0, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(0, s1.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(0, s1.matching_categories(adj_tag));
s1.insert_symbol(tagset, "subst");
BOOST_CHECK_EQUAL(1, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(1, s1.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(0, s1.matching_categories(adj_tag));
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(!s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
s2.insert_symbol(tagset, "pl");
BOOST_CHECK_EQUAL(1, s2.categories_count(tagset));
BOOST_CHECK_EQUAL(0, s2.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(1, s2.matching_categories(adj_tag));
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(!s1.is_subset_of(s2));
BOOST_CHECK(!s2.is_subset_of(s1));
BOOST_CHECK(!s1.intersects(s2));
s2.insert_symbol(tagset, "subst");
BOOST_CHECK_EQUAL(2, s2.categories_count(tagset));
BOOST_CHECK_EQUAL(1, s2.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(1, s2.matching_categories(adj_tag));
BOOST_CHECK(!s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(!s2.is_subset_of(s1));
BOOST_CHECK(s1.intersects(s2));
s1.insert_symbol(tagset, "pl");
BOOST_CHECK_EQUAL(2, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(1, s1.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(1, s1.matching_categories(adj_tag));
BOOST_CHECK(s1.equals(s2));
BOOST_CHECK(s1.is_subset_of(s2));
BOOST_CHECK(s2.is_subset_of(s1));
BOOST_CHECK(s1.intersects(s2));
s1.insert_symbol(tagset, "sg");
BOOST_CHECK_EQUAL(2, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(2, s1.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(1, s1.matching_categories(adj_tag));
s1.insert_symbol(tagset, "f");
BOOST_CHECK_EQUAL(3, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(3, s1.matching_categories(subst_tag));
BOOST_CHECK_EQUAL(1, s1.matching_categories(adj_tag));
s1.insert_symbol(tagset, "adj");
BOOST_CHECK_EQUAL(3, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(3, s1.categories_count(tagset));
BOOST_CHECK_EQUAL(2, s1.matching_categories(adj_tag));
}
BOOST_AUTO_TEST_CASE(position_ops)
{
boost::shared_ptr<Corpus2::Sentence> s(boost::make_shared<Corpus2::Sentence>());
SentenceContext sc(s);
Corpus2::Token* a_token = new Corpus2::Token("ZZ", PwrNlp::Whitespace::ManySpaces);
Corpus2::Tag t1(Corpus2::mask_t(0));
Corpus2::Lexeme l1("aaa", t1);
Corpus2::Lexeme l2("bbb", t1);
a_token->add_lexeme(l1);
a_token->add_lexeme(l2);
s->append(a_token);
s->append(a_token->clone());
Position begin(Position::Begin);
Position end(Position::End);
Position nowhere(Position::Nowhere);
Position zero(0);
Position one(1);
Position minus_one(-1);
Position minus_two(-2);
std::vector<Position> v;
v.push_back(begin);
v.push_back(end);
v.push_back(nowhere);
v.push_back(zero);
v.push_back(one);
v.push_back(minus_one);
v.push_back(minus_two);
for(size_t i = 0; i < v.size(); ++i) {
for(size_t j = 0; j < v.size(); ++j) {
BOOST_CHECK_EQUAL(i == j, v[i].equals(v[j]));
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i]));
if(i >= 2 && j >= 2) { //nowhere, zero, one, minus_one, minus_two
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
sc.advance();
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
sc.advance();
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
BOOST_CHECK_EQUAL(i == j, v[j].equals(v[i], sc));
sc.goto_start();
}
}
}
sc.goto_start();
BOOST_CHECK(begin.equals(zero, sc));
BOOST_CHECK(zero.equals(begin, sc));
BOOST_CHECK(one.equals(end, sc));
BOOST_CHECK(end.equals(one, sc));
sc.advance();
BOOST_CHECK(begin.equals(minus_one, sc));
BOOST_CHECK(minus_one.equals(begin, sc));
BOOST_CHECK(zero.equals(end, sc));
BOOST_CHECK(end.equals(zero, sc));
sc.advance();
BOOST_CHECK(begin.equals(minus_two, sc));
BOOST_CHECK(minus_two.equals(begin, sc));
BOOST_CHECK(minus_one.equals(end, sc));
BOOST_CHECK(end.equals(minus_one, sc));
}
BOOST_AUTO_TEST_CASE(bool_safe_bool)
{
Bool b(false);
BOOST_CHECK(!b);
if (b) {
BOOST_ERROR("if (b) on Bool(false)");
}
b.set_value(true);
if (!b) {
BOOST_ERROR("if (!b) on Bool(true)");
}
if (b) {
} else {
BOOST_ERROR("if (b) else reached on Bool(true)");
}
BOOST_CHECK(b);
}
BOOST_AUTO_TEST_SUITE_END()