{-# LANGUAGE CPP #-}
#if defined(mingw32_HOST_OS)
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
#endif
{-|
Module: Instances.System.Win32
Copyright: (C) 2014-2015 Ryan Scott
License: BSD-style (see the file LICENSE)
Maintainer: Ryan Scott
Stability: Provisional
Portability: GHC
Provides 'Arbitrary' instances for data types in the @Win32@ library.
-}
module Instances.System.Win32 () where
#if defined(mingw32_HOST_OS)
import Instances.Miscellaneous ()
import Prelude ()
import Prelude.Compat
import System.Win32.DebugApi (DebugEventInfo(..), Exception(..))
import System.Win32.File (BY_HANDLE_FILE_INFORMATION(..), WIN32_FILE_ATTRIBUTE_DATA(..))
import System.Win32.Info (ProcessorArchitecture(..), SYSTEM_INFO(..))
import System.Win32.Time (FILETIME(..), SYSTEMTIME(..),
TIME_ZONE_INFORMATION(..), TimeZoneId(..))
import Test.QuickCheck (Arbitrary(..), arbitraryBoundedEnum, oneof)
instance Arbitrary DebugEventInfo where
arbitrary = oneof [ pure UnknownDebugEvent
, Exception <$> arbitrary <*> arbitrary
, CreateThread <$> arbitrary
, CreateProcess <$> arbitrary <*> arbitrary <*> arbitrary
, ExitThread <$> arbitrary
, ExitProcess <$> arbitrary
, LoadDll <$> arbitrary
, UnloadDll <$> arbitrary
, DebugString <$> arbitrary <*> arbitrary <*> arbitrary
]
instance Arbitrary Exception where
arbitrary = oneof [ pure UnknownException
, AccessViolation <$> arbitrary <*> arbitrary
, pure ArrayBoundsExceeded
, pure Breakpoint
, pure DataTypeMisalignment
, pure FltDenormalOperand
, pure FltDivideByZero
, pure FltInexactResult
, pure FltInvalidOperation
, pure FltOverflow
, pure FltStackCheck
, pure FltUnderflow
, pure IllegalInstruction
, pure InPageError
, pure IntDivideByZero
, pure IntOverflow
, pure InvalidDisposition
, pure NonContinuable
, pure PrivilegedInstruction
, pure SingleStep
, pure StackOverflow
]
instance Arbitrary BY_HANDLE_FILE_INFORMATION where
arbitrary = BY_HANDLE_FILE_INFORMATION <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
instance Arbitrary WIN32_FILE_ATTRIBUTE_DATA where
arbitrary = WIN32_FILE_ATTRIBUTE_DATA <$> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary
instance Arbitrary ProcessorArchitecture where
arbitrary = oneof [ PaUnknown <$> arbitrary
, pure PaIntel
, pure PaMips
, pure PaAlpha
, pure PaPpc
, pure PaIa64
, pure PaIa32OnIa64
, pure PaAmd64
]
instance Arbitrary SYSTEM_INFO where
arbitrary = SYSTEM_INFO <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary
deriving instance Arbitrary FILETIME
instance Arbitrary SYSTEMTIME where
arbitrary = SYSTEMTIME <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
instance Arbitrary TIME_ZONE_INFORMATION where
arbitrary = TIME_ZONE_INFORMATION <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> arbitrary
deriving instance Bounded TimeZoneId
deriving instance Enum TimeZoneId
instance Arbitrary TimeZoneId where
arbitrary = arbitraryBoundedEnum
#endif