Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Andrew Reynolds, Mudathir Mohamed, Aina Niemetz 4 : : * 5 : : * This file is part of the cvc5 project. 6 : : * 7 : : * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS 8 : : * in the top-level source directory and their institutional affiliations. 9 : : * All rights reserved. See the file COPYING in the top-level source 10 : : * directory for licensing information. 11 : : * **************************************************************************** 12 : : * 13 : : * Black box testing of cvc5::parser::Command. 14 : : */ 15 : : 16 : : #include <cvc5/cvc5.h> 17 : : #include <cvc5/cvc5_parser.h> 18 : : 19 : : #include <sstream> 20 : : 21 : : #include "base/output.h" 22 : : #include "options/base_options.h" 23 : : #include "options/language.h" 24 : : #include "options/options.h" 25 : : #include "test_parser.h" 26 : : 27 : : using namespace cvc5::parser; 28 : : 29 : : namespace cvc5::internal { 30 : : namespace test { 31 : : 32 : : class TestApiBlackCommand : public TestParser 33 : : { 34 : : protected: 35 : 3 : TestApiBlackCommand() {} 36 : 3 : virtual ~TestApiBlackCommand() {} 37 : : 38 : 5 : Command parseCommand(const std::string& cmdStr) 39 : : { 40 : 10 : std::stringstream ss; 41 : 5 : ss << cmdStr << std::endl; 42 : 10 : InputParser parser(d_solver.get(), d_symman.get()); 43 : 5 : parser.setStreamInput( 44 : : modes::InputLanguage::SMT_LIB_2_6, ss, "command_black"); 45 : 9 : return parser.nextCommand(); 46 : : } 47 : : }; 48 : : 49 : 2 : TEST_F(TestApiBlackCommand, invoke) 50 : : { 51 : 1 : std::stringstream out; 52 : 1 : Command cmd; 53 : : // set logic command can be executed 54 : 1 : cmd = parseCommand("(set-logic QF_LIA)"); 55 [ - + ]: 1 : ASSERT_FALSE(cmd.isNull()); 56 : 1 : cmd.invoke(d_solver.get(), d_symman.get(), out); 57 : : // get model not available 58 : 1 : cmd = parseCommand("(get-model)"); 59 [ - + ]: 1 : ASSERT_FALSE(cmd.isNull()); 60 : 1 : cmd.invoke(d_solver.get(), d_symman.get(), out); 61 : 1 : std::string result = out.str(); 62 [ - + ]: 1 : ASSERT_EQ( 63 : : "(error \"cannot get model unless model generation is enabled (try " 64 : : "--produce-models)\")\n", 65 : : result); 66 : : // logic already set 67 [ + - ][ + - ]: 4 : ASSERT_THROW(parseCommand("(set-logic QF_LRA)"), ParserException); [ - + ] 68 : : } 69 : : 70 : 2 : TEST_F(TestApiBlackCommand, toString) 71 : : { 72 : 1 : Command cmd; 73 : 1 : cmd = parseCommand("(set-logic QF_LIA )"); 74 [ - + ]: 1 : ASSERT_FALSE(cmd.isNull()); 75 : : // note normalizes wrt whitespace 76 [ - + ]: 2 : ASSERT_EQ(cmd.toString(), "(set-logic QF_LIA)"); 77 : 1 : std::stringstream ss; 78 : 1 : ss << cmd; 79 [ - + ]: 2 : ASSERT_EQ(cmd.toString(), ss.str()); 80 : : } 81 : : 82 : 2 : TEST_F(TestApiBlackCommand, getCommandName) 83 : : { 84 : 1 : Command cmd; 85 : 1 : cmd = parseCommand("(get-model)"); 86 [ - + ]: 1 : ASSERT_FALSE(cmd.isNull()); 87 [ - + ]: 2 : ASSERT_EQ(cmd.getCommandName(), "get-model"); 88 : : } 89 : : 90 : : } // namespace test 91 : : } // namespace cvc5::internal