module Copilot.Core.Random.Weights
  ( Depth
  , Weights (..)
  , simpleWeights ) where
type Depth = Int
data Weights = Weights
  { maxExprDepth :: Int
  , maxBuffSize  :: Int
  , maxTriggers  :: Int
  , maxTrigArgs  :: Int
  , maxExtVars   :: Int
  , maxObservers :: Int
  , numStreams   :: Int
  
  , constFreq    :: Int
  , extVarFreq   :: Int
  , drop0Freq    :: Int
  , dropFreq     :: Int
  , externFreq   :: Int
  , op1Freq      :: Int
  , op2Freq      :: Int
  , op3Freq      :: Int
  
  , boolFreq     :: Int
  , int8Freq     :: Int
  , int16Freq    :: Int
  , int32Freq    :: Int
  , int64Freq    :: Int
  , word8Freq    :: Int
  , word16Freq   :: Int
  , word32Freq   :: Int
  , word64Freq   :: Int
  , floatFreq    :: Int
  , doubleFreq   :: Int 
  , divModFreq   :: Bool }
simpleWeights :: Weights
simpleWeights = Weights 
  { maxExprDepth = 10
  , maxBuffSize  = 8
  , maxTriggers  = 5
  , maxTrigArgs  = 5
  , maxExtVars   = 5
  , maxObservers = 8
  , numStreams   = 10
  
  , constFreq    = 1
  , extVarFreq   = 1
  , drop0Freq    = 1
  , dropFreq     = 1
  , externFreq   = 1
  , op1Freq      = 1
  , op2Freq      = 1
  , op3Freq      = 1
  
  , boolFreq     = 1
  , int8Freq     = 1
  , int16Freq    = 1
  , int32Freq    = 1
  , int64Freq    = 1
  , word8Freq    = 1
  , word16Freq   = 1
  , word32Freq   = 1
  , word64Freq   = 1
  , floatFreq    = 1
  , doubleFreq   = 1 
  , divModFreq   = True }