packages feed

cleveland-0.1.0: morley-test/Test/Michelson/Parser/Value.hs

-- SPDX-FileCopyrightText: 2021 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ

module Test.Michelson.Parser.Value
  ( test_exponentialBacktracking
  ) where

import Test.Tasty (TestTree, localOption, mkTimeout)
import Test.Tasty.HUnit (testCase, (@?=))

import Morley.Michelson.Parser as P
import Morley.Michelson.Untyped.Value

millisec :: Integer
millisec = 1000

test_exponentialBacktracking :: TestTree
test_exponentialBacktracking = localOption (mkTimeout $ 500 * millisec) $
  testCase "Parser is able to parse nested pairs in reasonable time" do
    let parsedValue = P.parseNoEnv P.value "" "Pair 0 (Pair 1 (Pair 2 (Pair 3 \
          \(Pair 4 (Pair 5 (Pair 6 (Pair 7 (Pair 8 (Pair 9 (Pair 10 (Pair 11 \
          \(Pair 12 (Pair 13 (Pair 14 (Pair 15 16)))))))))))))))"
        expected = foldr1 ValuePair $ ValueInt <$> 0 :| [1..16]

    parsedValue @?= Right expected