{-# OPTIONS_GHC -fno-warn-orphans #-} module Cursor.TextField.Gen where import Cursor.List.NonEmpty import Cursor.List.NonEmpty.Gen () import Cursor.Text.Gen import Cursor.TextField import Data.GenValidity import Data.GenValidity.Text import Test.QuickCheck instance GenValid TextFieldCursor where genValid :: Gen TextFieldCursor genValid = (Int -> Gen TextFieldCursor) -> Gen TextFieldCursor forall a. (Int -> Gen a) -> Gen a sized ((Int -> Gen TextFieldCursor) -> Gen TextFieldCursor) -> (Int -> Gen TextFieldCursor) -> Gen TextFieldCursor forall a b. (a -> b) -> a -> b $ \Int n -> do (Int a, Int b, Int c) <- Int -> Gen (Int, Int, Int) genSplit3 Int n [Text] prevs <- Int -> Gen [Text] -> Gen [Text] forall a. Int -> Gen a -> Gen a resize Int a (Gen [Text] -> Gen [Text]) -> Gen [Text] -> Gen [Text] forall a b. (a -> b) -> a -> b $ Gen Text -> Gen [Text] forall a. Gen a -> Gen [a] genListOf (Gen Text -> Gen [Text]) -> Gen Text -> Gen [Text] forall a b. (a -> b) -> a -> b $ Gen Char -> Gen Text genTextBy Gen Char genTextCursorChar [Text] nexts <- Int -> Gen [Text] -> Gen [Text] forall a. Int -> Gen a -> Gen a resize Int b (Gen [Text] -> Gen [Text]) -> Gen [Text] -> Gen [Text] forall a b. (a -> b) -> a -> b $ Gen Text -> Gen [Text] forall a. Gen a -> Gen [a] genListOf (Gen Text -> Gen [Text]) -> Gen Text -> Gen [Text] forall a b. (a -> b) -> a -> b $ Gen Char -> Gen Text genTextBy Gen Char genTextCursorChar TextCursor cur <- Int -> Gen TextCursor -> Gen TextCursor forall a. Int -> Gen a -> Gen a resize Int c (Gen TextCursor -> Gen TextCursor) -> Gen TextCursor -> Gen TextCursor forall a b. (a -> b) -> a -> b $ Gen Char -> Gen TextCursor textCursorWithGen Gen Char genTextCursorChar let nec :: NonEmptyCursor TextCursor Text nec = [Text] -> TextCursor -> [Text] -> NonEmptyCursor TextCursor Text forall a b. [b] -> a -> [b] -> NonEmptyCursor a b NonEmptyCursor [Text] prevs TextCursor cur [Text] nexts TextFieldCursor -> Gen TextFieldCursor forall (f :: * -> *) a. Applicative f => a -> f a pure (TextFieldCursor -> Gen TextFieldCursor) -> TextFieldCursor -> Gen TextFieldCursor forall a b. (a -> b) -> a -> b $ NonEmptyCursor TextCursor Text -> TextFieldCursor TextFieldCursor NonEmptyCursor TextCursor Text nec shrinkValid :: TextFieldCursor -> [TextFieldCursor] shrinkValid = TextFieldCursor -> [TextFieldCursor] forall a. (Validity a, Generic a, GValidRecursivelyShrink (Rep a), GValidSubterms (Rep a) a) => a -> [a] shrinkValidStructurally