content: {-# LANGUAGE DataKinds     #-}
  {-# LANGUAGE TypeFamilies  #-}
  {-# LANGUAGE TypeOperators #-}
  
  module Test.Memory.TypeLevel
         ( runTypeLevelTests
         ) where
  
  import Test.TypeSpec (Is, It, TypeSpec (Valid))
  import Test.TypeSpecCrazy (type ( ### ), type (-*-), type (-/-), type (~~~))
  
  import Membrain.Units
  
  -- | Type-check and execute all type-level tests.
  runTypeLevelTests :: IO ()
  runTypeLevelTests = print unitSymbolTests
  
  unitSymbolTests ::
      "UnitSymbol"
      ###
  
          "Simple"
          ~~~
              It "Name Bit    = b" (UnitSymbol Bit    `Is` "b")
          -*- It "Name Nibble = n" (UnitSymbol Nibble `Is` "n")
          -*- It "Name Byte   = B" (UnitSymbol Byte   `Is` "B")
  
      -/-
  
          "Decimal"
          ~~~
              It "Name Kilobyte  = kB" (UnitSymbol Kilobyte  `Is` "kB")
          -*- It "Name Megabyte  = MB" (UnitSymbol Megabyte  `Is` "MB")
          -*- It "Name Gigabyte  = GB" (UnitSymbol Gigabyte  `Is` "GB")
          -*- It "Name Terabyte  = TB" (UnitSymbol Terabyte  `Is` "TB")
          -*- It "Name Petabyte  = PB" (UnitSymbol Petabyte  `Is` "PB")
          -*- It "Name Exabyte   = EB" (UnitSymbol Exabyte   `Is` "EB")
          -*- It "Name Zettabyte = ZB" (UnitSymbol Zettabyte `Is` "ZB")
          -*- It "Name Yottabyte = YB" (UnitSymbol Yottabyte `Is` "YB")
  
      -/-
  
          "Binary"
          ~~~
              It "Name Kibibyte = KiB" (UnitSymbol Kibibyte `Is` "KiB")
          -*- It "Name Mebibyte = MiB" (UnitSymbol Mebibyte `Is` "MiB")
          -*- It "Name Gibibyte = GiB" (UnitSymbol Gibibyte `Is` "GiB")
          -*- It "Name Tebibyte = TiB" (UnitSymbol Tebibyte `Is` "TiB")
          -*- It "Name Pebibyte = PiB" (UnitSymbol Pebibyte `Is` "PiB")
          -*- It "Name Exbibyte = EiB" (UnitSymbol Exbibyte `Is` "EiB")
          -*- It "Name Zebibyte = ZiB" (UnitSymbol Zebibyte `Is` "ZiB")
          -*- It "Name Yobibyte = YiB" (UnitSymbol Yobibyte `Is` "YiB")
  unitSymbolTests = Valid
  