{-|
Module      : GoPro.Plus.Arbitrary
Description : Arbitrary instances.
Copyright   : (c) Dustin Sallings, 2020
License     : BSD3
Maintainer  : dustin@spy.net
Stability   : experimental

Arbitrary instances for GoPro.Plus
-}

{-# OPTIONS_GHC -Wno-orphans #-}
module GoPro.Plus.Arbitrary where

import           Generic.Random                 (genericArbitrary, uniform)
import           Test.QuickCheck                (Arbitrary(..), vector, choose, arbitraryBoundedEnum)
import           Test.QuickCheck.Instances.Text ()
import           Test.QuickCheck.Instances.Time ()

import GoPro.Plus.Media

instance Arbitrary FileInfo where arbitrary :: Gen FileInfo
arbitrary = Weights FileInfo -> Gen FileInfo
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights FileInfo
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary FileStuff where
  arbitrary :: Gen FileStuff
arbitrary = do
    [File]
_files <- Int -> Gen [File]
forall a. Arbitrary a => Int -> Gen [a]
vector (Int -> Gen [File]) -> Gen Int -> Gen [File]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
choose (Int
0,Int
3)
    [Variation]
_variations <- Int -> Gen [Variation]
forall a. Arbitrary a => Int -> Gen [a]
vector (Int -> Gen [Variation]) -> Gen Int -> Gen [Variation]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
choose (Int
0,Int
3)
    [Sprite]
_sprites <- Int -> Gen [Sprite]
forall a. Arbitrary a => Int -> Gen [a]
vector (Int -> Gen [Sprite]) -> Gen Int -> Gen [Sprite]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
choose (Int
0,Int
3)
    [SidecarFile]
_sidecar_files <- Int -> Gen [SidecarFile]
forall a. Arbitrary a => Int -> Gen [a]
vector (Int -> Gen [SidecarFile]) -> Gen Int -> Gen [SidecarFile]
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Int, Int) -> Gen Int
forall a. Random a => (a, a) -> Gen a
choose (Int
0,Int
3)
    FileStuff -> Gen FileStuff
forall (f :: * -> *) a. Applicative f => a -> f a
pure FileStuff :: [File] -> [Variation] -> [Sprite] -> [SidecarFile] -> FileStuff
FileStuff{[File]
[Variation]
[Sprite]
[SidecarFile]
_sidecar_files :: [SidecarFile]
_sprites :: [Sprite]
_variations :: [Variation]
_files :: [File]
_sidecar_files :: [SidecarFile]
_sprites :: [Sprite]
_variations :: [Variation]
_files :: [File]
..}

instance Arbitrary Variation where arbitrary :: Gen Variation
arbitrary = Weights Variation -> Gen Variation
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights Variation
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary SpriteFrame where arbitrary :: Gen SpriteFrame
arbitrary = Weights SpriteFrame -> Gen SpriteFrame
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights SpriteFrame
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary SidecarFile where arbitrary :: Gen SidecarFile
arbitrary = Weights SidecarFile -> Gen SidecarFile
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights SidecarFile
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary Sprite where arbitrary :: Gen Sprite
arbitrary = Weights Sprite -> Gen Sprite
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights Sprite
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary File where arbitrary :: Gen File
arbitrary = Weights File -> Gen File
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights File
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary Medium where arbitrary :: Gen Medium
arbitrary = Weights Medium -> Gen Medium
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights Medium
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary Moment where arbitrary :: Gen Moment
arbitrary = Weights Moment -> Gen Moment
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights Moment
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary ReadyToViewType where arbitrary :: Gen ReadyToViewType
arbitrary = Gen ReadyToViewType
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum

instance Arbitrary MediumType where arbitrary :: Gen MediumType
arbitrary = Gen MediumType
forall a. (Bounded a, Enum a) => Gen a
arbitraryBoundedEnum

instance Arbitrary PageInfo where arbitrary :: Gen PageInfo
arbitrary = Weights PageInfo -> Gen PageInfo
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights PageInfo
forall a. UniformWeight_ (Rep a) => Weights a
uniform

instance Arbitrary Listing where arbitrary :: Gen Listing
arbitrary = Weights Listing -> Gen Listing
forall a. GArbitrary UnsizedOpts a => Weights a -> Gen a
genericArbitrary Weights Listing
forall a. UniformWeight_ (Rep a) => Weights a
uniform