module SMT.Tests.Rendering where

open import Agda.Builtin.String using (String)

open import Cubical.Foundations.Prelude using (_≡_; refl)
open import Cubical.Data.Bool.Base using (false)
open import Cubical.Data.Int.Base using (negsuc)
open import Cubical.Data.List.Base using ([])

open import SMT.Core
open import SMT.Examples using (b₂; problem₁; problem₅; problem₆; problem₇; problem₉; x)

negative-int-renders-smtlib : exprSMT (int {Γ = []} (negsuc 1)) ≡ "(- 2)"
negative-int-renders-smtlib = refl

distinct-renders-smtlib : exprSMT (iNe x (int (negsuc 0))) ≡ "(distinct x (- 1))"
distinct-renders-smtlib = refl

xor-renders-smtlib : exprSMT (bXor b₂ (bool false)) ≡ "(xor b false)"
xor-renders-smtlib = refl

problem₁-check-renders-smtlib :
  counterexampleCheckSMT problem₁ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const x Int)\n" ++s
  "(assert (not (<= 0 (+ x 1))))\n" ++s
  "(check-sat)\n"
problem₁-check-renders-smtlib = refl

problem₁-query-renders-smtlib :
  counterexampleQuerySMT problem₁ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const x Int)\n" ++s
  "(assert (not (<= 0 (+ x 1))))\n" ++s
  "(check-sat)\n" ++s
  "(get-model)\n"
problem₁-query-renders-smtlib = refl

problem₅-check-renders-smtlib :
  counterexampleCheckSMT problem₅ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const b Bool)\n" ++s
  "(declare-const x Int)\n" ++s
  "(assert (not (<= (ite b x 0) x)))\n" ++s
  "(check-sat)\n"
problem₅-check-renders-smtlib = refl

problem₆-check-renders-smtlib :
  counterexampleCheckSMT problem₆ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const b Bool)\n" ++s
  "(assert (and b true))\n" ++s
  "(assert (not b))\n" ++s
  "(check-sat)\n"
problem₆-check-renders-smtlib = refl

problem₇-check-renders-smtlib :
  counterexampleCheckSMT problem₇ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const x Int)\n" ++s
  "(assert (>= x 0))\n" ++s
  "(assert (not (> x 0)))\n" ++s
  "(check-sat)\n"
problem₇-check-renders-smtlib = refl

problem₉-check-renders-smtlib :
  counterexampleCheckSMT problem₉ ≡
  "(set-logic QF_LIA)\n" ++s
  "(declare-const b Bool)\n" ++s
  "(assert (not (not (xor b b))))\n" ++s
  "(check-sat)\n"
problem₉-check-renders-smtlib = refl