Skip to content

Commit bf1cf27

Browse files
committed
-added a test and changed Generator to use Set-logic all. THIS MUST BE CHANGED SOON!
-added new test
1 parent a909475 commit bf1cf27

File tree

3 files changed

+69
-2
lines changed

3 files changed

+69
-2
lines changed

src/org/sosy_lab/java_smt/basicimpl/Generator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,9 @@ public static String getSMTLIB2String() {
255255
String endSMTLIB2 = "(check-sat)\n(get-model)\n(exit)";
256256
// FIXME Should we really add this to lines?
257257
lines.append(endSMTLIB2);
258-
return "(set-logic AUFLIRA)\n" + lines;
258+
// TODO GENERATOR URGENTLY NEEDS TO DETECT USED THEORIES AND DECLARE IT HERE
259+
// TODO NOT ALL SOLVER SUPPORT SET-LOGIC ALL!
260+
return "(set-logic ALL)\n" + lines;
259261
}
260262

261263
public static void resetGenerator() {

src/org/sosy_lab/java_smt/basicimpl/parserInterpreter/Visitor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_assertContext;
5757
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_declareConstContext;
5858
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_declareFunContext;
59+
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_defineSortContext;
5960
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_popContext;
6061
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Cmd_pushContext;
6162
import org.sosy_lab.java_smt.basicimpl.parserInterpreter.Smtlibv2Parser.Decl_sortContext;
@@ -456,7 +457,7 @@ public FormulaType<?> visitSort_id(Sort_idContext ctx) {
456457
case "String":
457458
return FormulaType.StringType;
458459
default:
459-
throw new ParserException(type + " is not a known Array sort. ");
460+
throw new ParserException(type + " is not a known sort.");
460461
}
461462
}
462463

@@ -2317,6 +2318,11 @@ public Object visitDecl_sort(Decl_sortContext ctx) {
23172318
throw new UnsupportedOperationException("JavaSMT does not support \"declare-sort\"");
23182319
}
23192320

2321+
@Override
2322+
public Object visitCmd_defineSort(Cmd_defineSortContext ctx) {
2323+
throw new UnsupportedOperationException("JavaSMT does not support \"define-sort\"");
2324+
}
2325+
23202326
@Override
23212327
public Object visitResp_get_model(Resp_get_modelContext ctx) {
23222328
isModel = true;

src/org/sosy_lab/java_smt/test/SMTLIB2StringTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
import org.sosy_lab.common.configuration.ConfigurationBuilder;
1616
import org.sosy_lab.common.configuration.InvalidConfigurationException;
1717
import org.sosy_lab.java_smt.api.BooleanFormula;
18+
import org.sosy_lab.java_smt.api.FormulaType;
19+
import org.sosy_lab.java_smt.api.FunctionDeclaration;
1820
import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula;
1921
import org.sosy_lab.java_smt.api.RegexFormula;
2022
import org.sosy_lab.java_smt.api.SolverException;
2123
import org.sosy_lab.java_smt.api.StringFormula;
24+
import org.sosy_lab.java_smt.basicimpl.Generator;
2225

2326
@SuppressWarnings({"CheckReturnValue", "ReturnValueIgnored"})
2427
public class SMTLIB2StringTest extends SolverBasedTest0.ParameterizedSolverBasedTest0 {
@@ -417,4 +420,60 @@ public void testRegexRange()
417420

418421
assertThat(actualResult).isEqualTo(regexMatch);
419422
}
423+
424+
@Test
425+
public void testDeclareUFString()
426+
throws IOException, SolverException, InterruptedException, InvalidConfigurationException {
427+
String x =
428+
"(set-info :license \"https://creativecommons.org/licenses/by/4.0/\")\n"
429+
+ "(set-info :category \"random\")\n"
430+
+ "(set-info :status sat)\n"
431+
+ "\n"
432+
+ "(declare-fun I () String)\n"
433+
+ "(declare-fun B () String)\n"
434+
+ "(declare-fun G () String)\n"
435+
+ "(declare-fun F () String)\n"
436+
+ "(assert (= (str.++ \"cefcdf\" B \"bgcdfedb\" G \"fgafb\" G \"gefdgcbadf\") (str.++"
437+
+ " G \"ef\" I \"dcbbf\" G \"f\" G \"bbg\" F \"gefdg\" G \"badf\") ))\n"
438+
+ "(check-sat)\n"
439+
+ "\n"
440+
+ "(exit)";
441+
442+
BooleanFormula actualResult = mgr.universalParseFromString(x);
443+
FunctionDeclaration<StringFormula> I =
444+
mgr.getUFManager().declareUF("I", FormulaType.StringType);
445+
FunctionDeclaration<StringFormula> B =
446+
mgr.getUFManager().declareUF("B", FormulaType.StringType);
447+
FunctionDeclaration<StringFormula> G =
448+
mgr.getUFManager().declareUF("G", FormulaType.StringType);
449+
FunctionDeclaration<StringFormula> F =
450+
mgr.getUFManager().declareUF("F", FormulaType.StringType);
451+
BooleanFormula constraint =
452+
smgr.equal(
453+
smgr.concat(
454+
smgr.makeString("cefcdf"),
455+
fmgr.callUF(B),
456+
smgr.makeString("bgcdfedb"),
457+
fmgr.callUF(G),
458+
smgr.makeString("fgafb"),
459+
fmgr.callUF(G),
460+
smgr.makeString("gefdgcbadf")),
461+
smgr.concat(
462+
fmgr.callUF(G),
463+
smgr.makeString("ef"),
464+
fmgr.callUF(I),
465+
smgr.makeString("dcbbf"),
466+
fmgr.callUF(G),
467+
smgr.makeString("f"),
468+
fmgr.callUF(G),
469+
smgr.makeString("bbg"),
470+
fmgr.callUF(F),
471+
smgr.makeString("gefdg"),
472+
fmgr.callUF(G),
473+
smgr.makeString("badf")));
474+
475+
Generator.assembleConstraint(actualResult);
476+
System.out.println(Generator.getSMTLIB2String());
477+
assertThat(actualResult).isEqualTo(constraint);
478+
}
420479
}

0 commit comments

Comments
 (0)