out << "(_ fp.to_sbv_total "
<< n.getConst<FloatingPointToSBVTotal>().bvs.d_size << ")";
break;
+ case kind::REGEXP_REPEAT_OP:
+ out << "(_ re.^ " << n.getConst<RegExpRepeat>().d_repeatAmount << ")";
+ break;
+ case kind::REGEXP_LOOP_OP:
+ out << "(_ re.loop " << n.getConst<RegExpLoop>().d_loopMinOcc << " "
+ << n.getConst<RegExpLoop>().d_loopMaxOcc << ")";
+ break;
default:
// fall back on whatever operator<< does on underlying type; we
// might luck out and be SMT-LIB v2 compliant
case kind::REGEXP_PLUS:
case kind::REGEXP_OPT:
case kind::REGEXP_RANGE:
- case kind::REGEXP_LOOP:
case kind::REGEXP_COMPLEMENT:
case kind::REGEXP_DIFF:
case kind::REGEXP_EMPTY:
case kind::SEQ_UNIT:
case kind::SEQ_NTH:
case kind::SEQUENCE_TYPE: out << smtKindString(k, d_variant) << " "; break;
+ case kind::REGEXP_REPEAT:
+ case kind::REGEXP_LOOP:
+ {
+ out << n.getOperator() << ' ';
+ stillNeedToPrintParams = false;
+ break;
+ }
case kind::CARDINALITY_CONSTRAINT: out << "fmf.card "; break;
case kind::CARDINALITY_VALUE: out << "fmf.card.val "; break;
case kind::REGEXP_PLUS: return "re.+";
case kind::REGEXP_OPT: return "re.opt";
case kind::REGEXP_RANGE: return "re.range";
+ case kind::REGEXP_REPEAT: return "re.^";
case kind::REGEXP_LOOP: return "re.loop";
case kind::REGEXP_COMPLEMENT: return "re.comp";
case kind::REGEXP_DIFF: return "re.diff";
--- /dev/null
+#####################
+## CMakeLists.txt
+## Top contributors (to current version):
+## Andres Noetzli
+## This file is part of the CVC4 project.
+## Copyright (c) 2009-2020 by the authors listed in the file AUTHORS
+## in the top-level source directory and their institutional affiliations.
+## All rights reserved. See the file COPYING in the top-level source
+## directory for licensing information.
+##
+#-----------------------------------------------------------------------------#
+# Add unit tests
+
+cvc4_add_unit_test_black(smt2_printer_black printer)
--- /dev/null
+/********************* */
+/*! \file smt2_printer_black.h
+ ** \verbatim
+ ** Top contributors (to current version):
+ ** Andres Noetzli
+ ** This file is part of the CVC4 project.
+ ** Copyright (c) 2009-2020 by the authors listed in the file AUTHORS
+ ** in the top-level source directory and their institutional affiliations.
+ ** All rights reserved. See the file COPYING in the top-level source
+ ** directory for licensing information.\endverbatim
+ **
+ ** \brief Black box testing of the SMT2 printer
+ **
+ ** Black box testing of the SMT2 printer.
+ **/
+
+#include <cxxtest/TestSuite.h>
+
+#include <iostream>
+
+#include "api/cvc4cpp.h"
+#include "expr/node.h"
+#include "expr/node_manager.h"
+#include "options/language.h"
+#include "smt/smt_engine.h"
+
+using namespace CVC4;
+using namespace CVC4::kind;
+
+class Smt2PrinterBlack : public CxxTest::TestSuite
+{
+ public:
+ void setUp() override
+ {
+ d_slv.reset(new api::Solver());
+ d_nm = d_slv->getSmtEngine()->getNodeManager();
+ }
+
+ void tearDown() override { d_slv.reset(); }
+
+ void checkToString(TNode n, const std::string& expected)
+ {
+ std::stringstream ss;
+ ss << Node::setdepth(-1)
+ << Node::setlanguage(language::output::LANG_SMTLIB_V2_6) << n;
+ TS_ASSERT_EQUALS(ss.str(), expected);
+ }
+
+ void testRegexpRepeat()
+ {
+ Node n = d_nm->mkNode(
+ d_nm->mkConst(RegExpRepeat(5)),
+ d_nm->mkNode(STRING_TO_REGEXP, d_nm->mkConst(String("x"))));
+ checkToString(n, "((_ re.^ 5) (str.to_re \"x\"))");
+ }
+
+ void testRegexpLoop()
+ {
+ Node n = d_nm->mkNode(
+ d_nm->mkConst(RegExpLoop(1, 3)),
+ d_nm->mkNode(STRING_TO_REGEXP, d_nm->mkConst(String("x"))));
+ checkToString(n, "((_ re.loop 1 3) (str.to_re \"x\"))");
+ }
+
+ private:
+ std::unique_ptr<api::Solver> d_slv;
+ NodeManager* d_nm;
+};