data-svd-0.1.0.0: test/DimSpec.hs
module DimSpec where
import Control.Lens
import Data.Default.Class
import Data.SVD
import Test.Hspec (Spec, describe, it, shouldBe)
spec :: Spec
spec = describe "Data.SVD.Dim" $ do
describe "expandField" $ do
it "no dim" $
expandField def `shouldBe` pure def
it "sampleField0" $
expandField sampleField0 `shouldBe` resultField0
it "sampleField1" $
expandField sampleField1 `shouldBe` resultField1
describe "expandRegister" $ do
it "sampleReg0" $
expandRegister sampleReg0 `shouldBe` resultReg0
it "sampleReg1" $
expandRegister sampleReg1 `shouldBe` resultReg1
describe "expandDevice" $ do
it "sampleDev0" $
expandDevice sampleDev0 `shouldBe` resultDev0
it "sampleDev1" $
expandDevice sampleDev1 `shouldBe` resultDev1
sampleDim0 =
Dimension
{ dimensionSize = 3
, dimensionIndex = DimensionIndex_FromTo 0 2
, dimensionIncrement = 0x2
}
sampleField0 = def
{ fieldName = "FX%s"
, fieldDimension = pure sampleDim0
, fieldDescription = "Desc %s foo"
, fieldBitOffset = 0x2
}
resultField0 =
[ def
{ fieldName = "FX0"
, fieldDescription = "Desc 0 foo"
, fieldBitOffset = 0x2
}
, def
{ fieldName = "FX1"
, fieldDescription = "Desc 1 foo"
, fieldBitOffset = 0x4
}
, def
{ fieldName = "FX2"
, fieldDescription = "Desc 2 foo"
, fieldBitOffset = 0x6
}
]
sampleDim1 =
Dimension
{ dimensionSize = 2
, dimensionIndex = DimensionIndex_FromTo 1 2
, dimensionIncrement = 0x2
}
sampleField1 = def
{ fieldName = "FY%s"
, fieldDimension = pure sampleDim1
, fieldDescription = "Desc %s foo"
, fieldBitOffset = 0x2
}
resultField1 =
[ def
{ fieldName = "FY1"
, fieldDescription = "Desc 1 foo"
, fieldBitOffset = 0x2
}
, def
{ fieldName = "FY2"
, fieldDescription = "Desc 2 foo"
, fieldBitOffset = 0x4
}
]
-- * Register
sampleRegDim0 =
Dimension
{ dimensionSize = 1
, dimensionIndex = DimensionIndex_FromTo 1 1
, dimensionIncrement = 0x4
}
sampleReg0 = def
{ regName = "CCR%s"
, regDimension = pure sampleRegDim0
, regDescription = "Desc %s"
, regAddressOffset = 0x34
}
resultReg0 =
[ def
{ regName = "CCR1"
, regDescription = "Desc 1"
, regAddressOffset = 0x34
}
]
sampleRegDim1 =
Dimension
{ dimensionSize = 2
, dimensionIndex = DimensionIndex_List ["AB", "CD"]
, dimensionIncrement = 0x4
}
sampleReg1 = def
{ regName = "TEST%s"
, regDimension = pure sampleRegDim1
, regDescription = "Desc %s foo"
, regAddressOffset = 0x34
}
resultReg1 =
[ def
{ regName = "TESTAB"
, regDescription = "Desc AB foo"
, regAddressOffset = 0x34
}
, def
{ regName = "TESTCD"
, regDescription = "Desc CD foo"
, regAddressOffset = 0x38
}
]
-- * Device
samplePeriph0 =
def
{ periphRegisters = pure $ sampleReg0 { regFields = pure sampleField0 }
}
resultPeriph0 =
def
{ periphRegisters = over (traverse . fields) (pure resultField0) resultReg0
}
sampleDev0 = def { devicePeripherals = pure samplePeriph0 }
resultDev0 = def { devicePeripherals = pure resultPeriph0 }
-- ** With clusters
sampleCluster0 =
def
{ clusterRegisters = pure $ sampleReg1 { regFields = pure sampleField1 }
, clusterAddressOffset = 0x10
}
samplePeriph1 =
def
{ periphRegisters = pure $ sampleReg0 { regFields = pure sampleField0 }
, periphClusters = pure $ sampleCluster0
}
resultPeriph1 =
def
{ periphRegisters =
over (traverse . fields) (pure resultField0) resultReg0
++ map
(over addressOffset (+0x10))
(over (traverse . fields) (pure resultField1) resultReg1)
}
sampleDev1 = def { devicePeripherals = pure samplePeriph1 }
resultDev1 = def { devicePeripherals = pure resultPeriph1 }