{-# LANGUAGE AllowAmbiguousTypes #-}

{-# OPTIONS_GHC -Wno-orphans #-}

module Tests.Symbolic.Compiler (specCompiler) where

import           Data.Function                               (($))
import           Test.Hspec                                  (Spec, describe)
import           Tests.Symbolic.Compiler.CompileWith         (specCompileWith)
import           Tests.Symbolic.Compiler.Optimization        (specOptimization)
import           Tests.Symbolic.Compiler.Test1               (specArithmetization1)
import           Tests.Symbolic.Compiler.Test2               (specArithmetization2)
import           Tests.Symbolic.Compiler.Test3               (specArithmetization3)
import           Tests.Symbolic.Compiler.Test4               (specArithmetization4)

import           ZkFold.Base.Algebra.Basic.Field             (Zp)
import           ZkFold.Base.Algebra.EllipticCurve.BLS12_381 (BLS12_381_Scalar)

specCompiler :: Spec
specCompiler = do
  describe "Compiler specification" $ do
    specArithmetization1 @(Zp BLS12_381_Scalar)
    specArithmetization2
    specArithmetization3
    specArithmetization4
    specOptimization @(Zp BLS12_381_Scalar)
    specCompileWith @(Zp BLS12_381_Scalar)