Skip to content

Commit 9197ed1

Browse files
Added a native version of the testcase for #339.
1 parent d78b8f4 commit 9197ed1

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/org/sosy_lab/java_smt/solvers/mathsat5/Mathsat5NativeApiTest.java

+53
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_check_sat;
1414
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_create_config;
1515
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_create_env;
16+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_create_shared_env;
1617
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_decl_get_arity;
1718
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_decl_get_name;
1819
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_destroy_config;
@@ -26,10 +27,12 @@
2627
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_get_rational_type;
2728
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_is_enum_type;
2829
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_is_integer_type;
30+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_and;
2931
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_asin;
3032
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_eq;
3133
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_equal;
3234
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_exp;
35+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_leq;
3336
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_log;
3437
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_not;
3538
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_make_number;
@@ -45,12 +48,17 @@
4548
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_pop_backtrack_point;
4649
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_push_backtrack_point;
4750
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_option_checked;
51+
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_set_termination_callback;
4852
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_get_type;
4953
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_is_pi;
5054
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_term_repr;
5155
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_type_equals;
5256
import static org.sosy_lab.java_smt.solvers.mathsat5.Mathsat5NativeApi.msat_type_repr;
5357

58+
import java.util.concurrent.ExecutionException;
59+
import java.util.concurrent.ExecutorService;
60+
import java.util.concurrent.Executors;
61+
import java.util.concurrent.Future;
5462
import org.junit.AssumptionViolatedException;
5563
import org.junit.Before;
5664
import org.junit.BeforeClass;
@@ -526,4 +534,49 @@ public void enumTypeTest() throws SolverException, InterruptedException {
526534
assertThat(msat_check_sat(env)).isFalse();
527535
msat_pop_backtrack_point(env);
528536
}
537+
538+
private final ExecutorService executor = Executors.newSingleThreadExecutor();
539+
540+
541+
@SuppressWarnings("unused")
542+
private long createSharedEnv(long sibling) {
543+
long cfg = msat_create_config();
544+
msat_set_option_checked(cfg, "dpll.ghost_filtering", "true");
545+
msat_set_option_checked(cfg, "theory.la.split_rat_eq", "false");
546+
547+
long prover = msat_create_shared_env(cfg, sibling);
548+
msat_destroy_config(cfg);
549+
550+
// FIXME: Bug #339 is caused by this line. Removing it will fix the test.
551+
long hook = msat_set_termination_callback(prover, () -> false);
552+
553+
return prover;
554+
}
555+
556+
private long makeLt(long e, long t1, long t2) {
557+
return msat_make_not(e, msat_make_leq(e, t2, t1));
558+
}
559+
560+
@Test
561+
public void bug339Test() throws ExecutionException, InterruptedException {
562+
long integerType = msat_get_integer_type(env);
563+
564+
long varA = msat_make_variable(env, "A", integerType);
565+
long varB = msat_make_variable(env, "B", integerType);
566+
567+
long formula = msat_make_and(env, makeLt(env, varA, varB), makeLt(env, varB, varA));
568+
569+
long prover = createSharedEnv(this.env);
570+
msat_assert_formula(prover, formula);
571+
572+
Future<?> task1 = executor.submit(() -> {
573+
try {
574+
assertThat(msat_check_sat(prover)).isFalse();
575+
} catch (InterruptedException | SolverException pE) {
576+
throw new RuntimeException(pE);
577+
}
578+
});
579+
580+
assert task1.get() == null;
581+
}
529582
}

0 commit comments

Comments
 (0)