LCOV - code coverage report
Current view: top level - data/test - sort_expression_test.cpp (source / functions) Hit Total Coverage
Test: mcrl2_coverage.info.cleaned Lines: 116 116 100.0 %
Date: 2024-04-21 03:44:01 Functions: 10 10 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Author(s): Jeroen Keiren
       2             : // Copyright: see the accompanying file COPYING or copy at
       3             : // https://github.com/mCRL2org/mCRL2/blob/master/COPYING
       4             : //
       5             : // Distributed under the Boost Software License, Version 1.0.
       6             : // (See accompanying file LICENSE_1_0.txt or copy at
       7             : // http://www.boost.org/LICENSE_1_0.txt)
       8             : //
       9             : /// \file sort_expression_test.cpp
      10             : /// \brief Basic regression test for sort expressions.
      11             : 
      12             : #define BOOST_TEST_MODULE sort_expression_test
      13             : #include <boost/test/included/unit_test.hpp>
      14             : 
      15             : #include "mcrl2/atermpp/aterm_io.h"
      16             : #include "mcrl2/data/alias.h"
      17             : #include "mcrl2/data/structured_sort.h"
      18             : 
      19             : using namespace mcrl2;
      20             : using namespace mcrl2::data;
      21             : 
      22           2 : BOOST_AUTO_TEST_CASE(basic_sort_test)
      23             : {
      24           2 :   basic_sort s("S");
      25             : 
      26           1 :   BOOST_CHECK(is_basic_sort(s));
      27           1 :   BOOST_CHECK(!is_function_sort(s));
      28           1 :   BOOST_CHECK(!is_alias(s));
      29           1 :   BOOST_CHECK(!is_structured_sort(s));
      30           1 :   BOOST_CHECK(!is_container_sort(s));
      31             : 
      32           1 :   BOOST_CHECK_EQUAL(pp(s.name()), "S");
      33           1 :   BOOST_CHECK_EQUAL(s, s);
      34             : 
      35           2 :   basic_sort t("T");
      36           1 :   BOOST_CHECK(s != t);
      37           1 :   BOOST_CHECK(s.name() != t.name());
      38             : 
      39           1 :   const sort_expression& t_e(t);
      40           1 :   basic_sort t_e_(t_e);
      41           1 :   BOOST_CHECK_EQUAL(t_e_, t);
      42           1 :   BOOST_CHECK_EQUAL(t_e_.name(), t.name());
      43           1 : }
      44             : 
      45           2 : BOOST_AUTO_TEST_CASE(function_sort_test)
      46             : {
      47           2 :   basic_sort s0("S0");
      48           2 :   basic_sort s1("S1");
      49           2 :   basic_sort s("S");
      50             : 
      51           3 :   sort_expression_list s01 = { s0, s1 };
      52           1 :   function_sort fs(s01, s);
      53           1 :   BOOST_CHECK(!is_basic_sort(fs));
      54           1 :   BOOST_CHECK(is_function_sort(fs));
      55           1 :   BOOST_CHECK(!is_alias(fs));
      56           1 :   BOOST_CHECK(!is_structured_sort(fs));
      57           1 :   BOOST_CHECK(!is_container_sort(fs));
      58           1 :   BOOST_CHECK_EQUAL(fs, fs);
      59           1 :   BOOST_CHECK_EQUAL(fs.domain().size(), static_cast< std::size_t >(s01.size()));
      60             : 
      61             :   // Element wise check
      62           1 :   sort_expression_list::const_iterator i = s01.begin();
      63           1 :   sort_expression_list::iterator j = fs.domain().begin();
      64           3 :   while (i != s01.end() && j != fs.domain().end())
      65             :   {
      66           2 :     BOOST_CHECK_EQUAL(*i, *j);
      67           2 :     ++i;
      68           2 :     ++j;
      69             :   }
      70             : 
      71           1 :   BOOST_CHECK_EQUAL(fs.domain(), s01);
      72           1 :   BOOST_CHECK_EQUAL(fs.codomain(), s);
      73             : 
      74           1 :   const sort_expression& fs_e(fs);
      75           1 :   function_sort fs_e_(fs_e);
      76           1 :   BOOST_CHECK_EQUAL(fs_e_, fs);
      77           1 :   BOOST_CHECK_EQUAL(fs_e_.domain(), fs.domain());
      78           1 :   BOOST_CHECK_EQUAL(fs_e_.codomain(), fs.codomain());
      79             : 
      80           1 :   BOOST_CHECK_EQUAL(fs, make_function_sort_(s0, s1, s));
      81           1 :   BOOST_CHECK_EQUAL(fs.domain(), make_function_sort_(s0, s1, s).domain());
      82           1 : }
      83             : 
      84           2 : BOOST_AUTO_TEST_CASE(alias_test)
      85             : {
      86           2 :   basic_sort s0("S0");
      87             : 
      88           2 :   basic_sort s0_name("other_S");
      89           1 :   alias s0_(s0_name, s0);
      90           1 :   BOOST_CHECK(is_alias(s0_));
      91           1 :   BOOST_CHECK_EQUAL(s0_.name(), s0_name);
      92           1 :   BOOST_CHECK_EQUAL(s0_.reference(), s0);
      93             : 
      94           1 :   const alias& s0_e_(s0_);
      95           1 :   BOOST_CHECK_EQUAL(s0_e_, s0_);
      96           1 :   BOOST_CHECK_EQUAL(s0_e_.name(), s0_.name());
      97           1 :   BOOST_CHECK_EQUAL(s0_e_.reference(), s0_.reference());
      98           1 : }
      99             : 
     100           2 : BOOST_AUTO_TEST_CASE(structured_sort_test)
     101             : {
     102           2 :   basic_sort s0("S0");
     103           2 :   basic_sort s1("S1");
     104           1 :   structured_sort_constructor_argument p0("p0", s0);
     105           1 :   structured_sort_constructor_argument p1(s1);
     106           1 :   BOOST_CHECK_EQUAL(pp(p0.name()), "p0");
     107           1 :   BOOST_CHECK_EQUAL(p1.name(), core::empty_identifier_string());
     108           1 :   BOOST_CHECK_EQUAL(p0.sort(), s0);
     109           1 :   BOOST_CHECK_EQUAL(p1.sort(), s1);
     110             : 
     111           1 :   structured_sort_constructor_argument_vector a1;
     112           1 :   a1.push_back(p0);
     113           1 :   a1.push_back(p1);
     114           1 :   structured_sort_constructor_argument_vector a2;
     115           1 :   a2.push_back(p0);
     116             : 
     117           1 :   structured_sort_constructor c1("c1", a1, "is_c1");
     118           2 :   structured_sort_constructor c2("c2", a2);
     119           1 :   BOOST_CHECK_EQUAL(pp(c1.name()), "c1");
     120           1 :   BOOST_CHECK(structured_sort_constructor_argument_vector(c1.arguments().begin(),c1.arguments().end()) == a1);
     121           1 :   BOOST_CHECK_EQUAL(pp(c1.recogniser()), "is_c1");
     122           1 :   BOOST_CHECK_EQUAL(pp(c2.name()), "c2");
     123           1 :   BOOST_CHECK(structured_sort_constructor_argument_vector(c2.arguments().begin(),c2.arguments().end()) == a2);
     124           1 :   BOOST_CHECK_EQUAL(c2.recogniser(), core::empty_identifier_string());
     125             : 
     126           3 :   structured_sort_constructor_list cs = { c1, c2 };
     127             : 
     128           1 :   structured_sort s(cs);
     129             : 
     130           1 :   BOOST_CHECK(!is_basic_sort(s));
     131           1 :   BOOST_CHECK(!is_function_sort(s));
     132           1 :   BOOST_CHECK(!is_alias(s));
     133           1 :   BOOST_CHECK(is_structured_sort(s));
     134           1 :   BOOST_CHECK(!is_container_sort(s));
     135             : 
     136           1 :   BOOST_CHECK_EQUAL(s.constructors(), cs);
     137             : 
     138           1 :   const sort_expression& s_e(s);
     139           1 :   structured_sort s_e_(s_e);
     140           1 :   BOOST_CHECK_EQUAL(s_e_, s);
     141           1 :   BOOST_CHECK_EQUAL(s_e_.constructors(), s.constructors());
     142             : 
     143           3 :   structured_sort_constructor_argument_vector nv {structured_sort_constructor_argument(static_cast<sort_expression const&>(sort_nat::nat()))};
     144           3 :   structured_sort_constructor_argument_vector bv {structured_sort_constructor_argument(static_cast<sort_expression const&>(sort_bool::bool_()))};
     145           2 :   structured_sort_constructor b("B", nv);
     146           2 :   structured_sort_constructor c("C", bv);
     147           5 :   structured_sort bc(structured_sort_constructor_list({b,c}));
     148             : 
     149           3 :   BOOST_CHECK_EQUAL(bc.constructors(), structured_sort_constructor_list({ b, c }));
     150           1 :   structured_sort_constructor_vector bc_constructors(bc.constructors().begin(), bc.constructors().end());
     151           1 :   BOOST_CHECK_EQUAL(bc_constructors[0], b);
     152           1 :   BOOST_CHECK_EQUAL(bc_constructors[1], c);
     153           1 :   BOOST_CHECK(!bc_constructors[0].arguments().empty());
     154           1 :   BOOST_CHECK(!bc_constructors[1].arguments().empty());
     155           1 :   BOOST_CHECK(sort_nat::is_nat(bc_constructors[0].arguments().begin()->sort()));
     156           1 :   BOOST_CHECK(sort_bool::is_bool(bc_constructors[1].arguments().begin()->sort()));
     157           1 : }
     158             : 
     159           2 : BOOST_AUTO_TEST_CASE(container_sort_test)
     160             : {
     161           2 :   basic_sort s0("S0");
     162           2 :   basic_sort s1("S1");
     163           1 :   container_sort ls0(list_container(), s0);
     164           2 :   container_sort ls1(list_container(), s1);
     165             : 
     166           1 :   BOOST_CHECK_EQUAL(ls0.container_name(), list_container());
     167           1 :   BOOST_CHECK_EQUAL(ls0.element_sort(), s0);
     168           1 :   BOOST_CHECK_EQUAL(ls1.element_sort(), s1);
     169           1 :   BOOST_CHECK(ls0.element_sort() != ls1.element_sort());
     170           1 : }
     171             : 

Generated by: LCOV version 1.14