@@ -559,11 +559,11 @@ tests = testGroup "hevm"
559
559
let simp = Expr. simplifyProp $ PLT (Max (Lit 5 ) (BufLength (AbstractBuf " txdata" ))) (Lit 99 )
560
560
assertEqualM " max-buflength rules" simp $ PLT (BufLength (AbstractBuf " txdata" )) (Lit 99 )
561
561
, test " simp-assoc-add1" $ do
562
- let simp = Expr. simplify $ Add (Var " a " ) (Add ( Var " b " ) (Var " c " ) )
563
- assertEqualM " assoc rules" simp $ Add (Add ( Var " a" ) (Var " b" )) (Var " c" )
562
+ let simp = Expr. simplify $ Add (Add ( Var " c " ) (Var " a " )) (Var " b " )
563
+ assertEqualM " assoc rules" simp $ Add (Var " a" ) (Add ( Var " b" ) (Var " c" ) )
564
564
, test " simp-assoc-add2" $ do
565
- let simp = Expr. simplify $ Add (Lit 1 ) (Add ( Var " b " ) (Var " c " ) )
566
- assertEqualM " assoc rules" simp $ Add (Add ( Lit 1 ) (Var " b" )) (Var " c" )
565
+ let simp = Expr. simplify $ Add (Add ( Lit 1 ) (Var " c " )) (Var " b " )
566
+ assertEqualM " assoc rules" simp $ Add (Lit 1 ) (Add ( Var " b" ) (Var " c" ) )
567
567
, test " simp-assoc-add3" $ do
568
568
let simp = Expr. simplify $ Add (Lit 1 ) (Add (Lit 2 ) (Var " c" ))
569
569
assertEqualM " assoc rules" simp $ Add (Lit 3 ) (Var " c" )
@@ -578,16 +578,22 @@ tests = testGroup "hevm"
578
578
assertEqualM " assoc rules" simp $ Lit 10
579
579
, test " simp-assoc-add-7" $ do
580
580
let simp = Expr. simplify $ Add (Var " a" ) (Add (Var " b" ) (Lit 2 ))
581
- assertEqualM " assoc rules" simp $ Add (Add ( Lit 2 ) (Var " a" )) (Var " b" )
581
+ assertEqualM " assoc rules" simp $ Add (Lit 2 ) (Add ( Var " a" ) (Var " b" ) )
582
582
, test " simp-assoc-add8" $ do
583
583
let simp = Expr. simplify $ Add (Add (Var " a" ) (Add (Lit 0x2 ) (Var " b" ))) (Add (Var " c" ) (Add (Lit 0x2 ) (Var " d" )))
584
- assertEqualM " assoc rules" simp $ Add (Add ( Add (Add (Lit 0x4 ) ( Var " a" )) ( Var " b" )) ( Var " c" )) (Var " d" )
584
+ assertEqualM " assoc rules" simp $ Add (Lit 4 ) (Add (Var " a" ) ( Add ( Var " b" ) ( Add ( Var " c" ) (Var " d" ))) )
585
585
, test " simp-assoc-mul1" $ do
586
- let simp = Expr. simplify $ Mul (Var " a " ) (Mul ( Var " b " ) (Var " c" ) )
587
- assertEqualM " assoc rules" simp $ Mul (Mul ( Var " a" ) (Var " b" )) (Var " c" )
586
+ let simp = Expr. simplify $ Mul (Mul ( Var " b " ) (Var " a " )) (Var " c" )
587
+ assertEqualM " assoc rules" simp $ Mul (Var " a" ) (Mul ( Var " b" ) (Var " c" ) )
588
588
, test " simp-assoc-mul2" $ do
589
589
let simp = Expr. simplify $ Mul (Lit 2 ) (Mul (Var " a" ) (Lit 3 ))
590
590
assertEqualM " assoc rules" simp $ Mul (Lit 6 ) (Var " a" )
591
+ , test " simp-assoc-xor1" $ do
592
+ let simp = Expr. simplify $ Xor (Lit 2 ) (Xor (Var " a" ) (Lit 3 ))
593
+ assertEqualM " assoc rules" simp $ Xor (Lit 1 ) (Var " a" )
594
+ , test " simp-assoc-xor2" $ do
595
+ let simp = Expr. simplify $ Xor (Lit 2 ) (Xor (Var " b" ) (Xor (Var " a" ) (Lit 3 )))
596
+ assertEqualM " assoc rules" simp $ Xor (Lit 1 ) (Xor (Var " a" ) (Var " b" ))
591
597
, test " simp-zero-write-extend-buffer-len" $ do
592
598
let
593
599
expr = BufLength $ CopySlice (Lit 0 ) (Lit 0x10 ) (Lit 0 ) (AbstractBuf " buffer" ) (ConcreteBuf " bimm" )
@@ -1508,7 +1514,10 @@ tests = testGroup "hevm"
1508
1514
|]
1509
1515
let sig = Just (Sig " fun(uint256,uint256)" [AbiUIntType 256 , AbiUIntType 256 ])
1510
1516
(_, k) <- withDefaultSolver $ \ s -> checkAssert s defaultPanicCodes c sig [] defaultVeriOpts
1511
- putStrLnM $ " Ret: " <> (show k)
1517
+ let numErrs = sum $ map (fromEnum . isError) k
1518
+ assertEqualM " number of errors (i.e. copySlice issues) is 1" 1 numErrs
1519
+ let errStrings = mapMaybe EVM.SymExec. getError k
1520
+ assertEqualM " All errors are from copyslice" True $ all (" CopySlice" `List.isInfixOf` ) errStrings
1512
1521
,
1513
1522
test " symbolic-copyslice" $ do
1514
1523
Just c <- solcRuntime " MyContract"
@@ -4691,11 +4700,11 @@ tests = testGroup "hevm"
4691
4700
putStrLnM " ------------- END -----------------"
4692
4701
Just aPrgm <- liftIO $ yul " " $ T. pack $ unlines filteredASym
4693
4702
Just bPrgm <- liftIO $ yul " " $ T. pack $ unlines filteredBSym
4694
- procs <- liftIO $ getNumProcessors
4695
- withSolvers CVC5 (unsafeInto procs) 1 (Just 100 ) $ \ s -> do
4703
+ procs <- liftIO getNumProcessors
4704
+ withSolvers Bitwuzla (unsafeInto procs) 1 (Just 100 ) $ \ s -> do
4696
4705
calldata <- mkCalldata Nothing []
4697
4706
(res, _) <- equivalenceCheck s aPrgm bPrgm opts calldata False
4698
- end <- liftIO $ getCurrentTime
4707
+ end <- liftIO getCurrentTime
4699
4708
case any isCex res of
4700
4709
False -> liftIO $ do
4701
4710
print $ " OK. Took " <> (show $ diffUTCTime end start) <> " seconds"
0 commit comments