12#ifndef MCRL2_DATA_DETAIL_TEST_REWRITERS_H
13#define MCRL2_DATA_DETAIL_TEST_REWRITERS_H
29template <
typename Derived>
46 std::multiset<data_expression> result;
59 std::multiset<data_expression> result;
71 std::multiset<data_expression> s =
split_and(y);
77 std::multiset<data_expression> s =
split_or(y);
87 typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
91 core::make_apply_builder<normalize_and_or_builder>().apply(result, x);
97 typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* = 0
100 core::make_apply_builder<normalize_and_or_builder>().update(x);
104template <
typename Derived>
153 typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
157 core::make_apply_builder<normalize_equality_builder>().apply(result, x);
163 typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* = 0
166 core::make_apply_builder<normalize_equality_builder>().update(x);
170template <
typename Function>
186template <
typename Function>
232template <
typename Rewriter1,
typename Rewriter2>
238 parser(var_decl, data_spec),
239 std::equal_to<data_expression>(),
An application of a data expression to a number of arguments.
data_expression operator()(const std::string &expr)
parser(const std::string &var_decl=VARIABLE_SPECIFICATION(), const std::string &data_spec="")
add your file description here.
add your file description here.
Join and split functions for data expressions.
Parser for data specifications.
data_expression parse_data_expression(const std::string &text)
T normalize_and_or(const T &x, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
data_expression I(const data_expression &x)
variable_list parse_variables(const std::string &text)
normalizer< Function > N(const Function &f)
T normalize_equality(const T &x, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
std::string VARIABLE_SPECIFICATION()
void test_rewriters(Rewriter1 R1, Rewriter2 R2, std::string expr1, std::string expr2, const std::string &var_decl=VARIABLE_SPECIFICATION(), const std::string &data_spec="")
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
bool is_not_equal_to_application(const DataExpression &e)
Recogniser for application of !=.
data_specification parse_data_specification(std::istream &in)
Parses a and type checks a data specification.
data_expression join_or(FwdIt first, FwdIt last)
Returns or applied to the sequence of data expressions [first, last)
const data_expression & binary_right1(const data_expression &x)
const data_expression & binary_left1(const data_expression &x)
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
data_expression join_and(FwdIt first, FwdIt last)
Returns and applied to the sequence of data expressions [first, last)
bool is_equal_to_application(const DataExpression &e)
Recogniser for application of ==.
bool test_operation(const std::string &expr1, const std::string &expr2, Parser parse, Compare comp, Operation1 op1, const std::string &opname1, Operation2 op2, const std::string &opname2)
Generic function that applies two operations to two objects, and compares the results.
void split(const T &t, OutputIterator i, MatchFunction match, AccessorFunction1 lhs, AccessorFunction2 rhs)
Splits a binary tree T into a sequence, and writes the result to the output range given by an output ...
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(T &result, const data::variable &x)
std::multiset< data_expression > split_and(const data_expression &expr)
Splits a conjunction into a sequence of operands Given a data expression of the form p1 && p2 && ....
data_expression_builder< Derived > super
void apply(T &result, const application &x)
std::multiset< data_expression > split_or(const data_expression &expr)
Splits a disjunction into a sequence of operands Given a data expression of the form p1 || p2 || ....
data_expression_builder< Derived > super
void apply(T &result, const application &x)
normalizer(const Function &f0)
data_expression operator()(const data_expression &t) const
Function for testing operations.