base64-bytestring 0.1.1.1 → 0.1.1.3
raw patch · 5 files changed
+127/−5 lines, 5 filesdep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
Files
- Data/ByteString/Base64.hs +4/−1
- Data/ByteString/Base64/URL.hs +4/−1
- base64-bytestring.cabal +2/−2
- benchmarks/BM.hs +1/−1
- tests/Tests.hs +116/−0
Data/ByteString/Base64.hs view
@@ -1,4 +1,7 @@-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ >= 702+{-# LANGUAGE Trustworthy #-}+#endif -- | -- Module : Data.ByteString.Base64
Data/ByteString/Base64/URL.hs view
@@ -1,4 +1,7 @@-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ >= 702+{-# LANGUAGE Trustworthy #-}+#endif -- | -- Module : Data.ByteString.Base64.URL
base64-bytestring.cabal view
@@ -1,5 +1,5 @@ name: base64-bytestring-version: 0.1.1.1+version: 0.1.1.3 synopsis: Fast base64 encoding and deconding for ByteStrings description: Fast base64 encoding and deconding for ByteStrings homepage: https://github.com/bos/base64-bytestring@@ -29,7 +29,7 @@ build-depends: base == 4.*,- bytestring == 0.9.*+ bytestring >= 0.9.0 ghc-options: -Wall -funbox-strict-fields ghc-prof-options: -auto-all
benchmarks/BM.hs view
@@ -3,7 +3,7 @@ import Criterion.Main import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Base64 as B-import qualified Data.ByteString.Base64 as U+import qualified Data.ByteString.Base64.URL as U sized name orig = bgroup name [
+ tests/Tests.hs view
@@ -0,0 +1,116 @@+{-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Main (main) where++import Test.Framework (Test, defaultMain, testGroup)+import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Framework.Providers.HUnit (testCase)++import Test.QuickCheck (Arbitrary(..))++import Control.Monad (liftM)+import qualified Data.ByteString.Base64 as Base64+import qualified Data.ByteString.Base64.URL as Base64URL+import Data.ByteString (ByteString)+import Data.ByteString.Char8 ()+import qualified Data.ByteString as B+import Test.HUnit hiding (Test)+++main :: IO ()+main = defaultMain tests++tests :: [Test]+tests = [ + testGroup "Base64" [+ testProperty "decodeEncode" $+ genericDecodeEncode Base64.encode Base64.decode+ , testProperty "decodeEncode Lenient" $+ genericDecodeEncode Base64.encode+ (liftM Right Base64.decodeLenient)+ , testGroup "base64-string tests" base64_string_tests + ]+ , testGroup "Base64URL" [+ testProperty "decodeEncode" $+ genericDecodeEncode Base64URL.encode Base64URL.decode+ , testProperty "decodeEncode Lenient" $+ genericDecodeEncode Base64URL.encode+ (liftM Right Base64URL.decodeLenient)+ , testGroup "base64-string tests" base64url_string_tests + ]+ ]++instance Arbitrary ByteString where+ arbitrary = liftM B.pack arbitrary++-- | Decoding an encoded sintrg should produce the original string.+genericDecodeEncode :: (ByteString -> ByteString)+ -> (ByteString -> Either String ByteString)+ -> ByteString -> Bool+genericDecodeEncode enc dec x = case dec (enc x) of+ Left _ -> False+ Right x' -> x == x'+ +--+-- Unit tests from base64-string+-- Copyright (c) Ian Lynagh, 2005, 2007.+--++base64_string_tests :: [Test]+base64_string_tests = + base64_string_test Base64.encode Base64.decode testData +++ base64_string_test Base64.encode decodeURL testData+ where decodeURL :: ByteString -> Either String ByteString+ decodeURL = liftM Right Base64.decodeLenient+ testData :: [(ByteString, ByteString)]+ testData = [("", "")+ ,("\0", "AA==")+ ,("\255", "/w==")+ ,("E", "RQ==")+ ,("Ex", "RXg=")+ ,("Exa", "RXhh")+ ,("Exam", "RXhhbQ==")+ ,("Examp", "RXhhbXA=")+ ,("Exampl", "RXhhbXBs")+ ,("Example", "RXhhbXBsZQ==")+ ,("Ex\0am\254ple", "RXgAYW3+cGxl")+ ,("Ex\0am\255ple", "RXgAYW3/cGxl")+ ]++-- | Same as the base64_string_tests but using the alternative alphabet+base64url_string_tests :: [Test]+base64url_string_tests =+ base64_string_test Base64URL.encode Base64URL.decode testData +++ base64_string_test Base64URL.encode decodeURL testData+ where decodeURL :: ByteString -> Either String ByteString+ decodeURL = liftM Right Base64URL.decodeLenient+ testData :: [(ByteString, ByteString)]+ testData = [("", "")+ ,("\0", "AA==")+ ,("\255", "_w==")+ ,("E", "RQ==")+ ,("Ex", "RXg=")+ ,("Exa", "RXhh")+ ,("Exam", "RXhhbQ==")+ ,("Examp", "RXhhbXA=")+ ,("Exampl", "RXhhbXBs")+ ,("Example", "RXhhbXBsZQ==")+ ,("Ex\0am\254ple", "RXgAYW3-cGxl")+ ,("Ex\0am\255ple", "RXgAYW3_cGxl")+ ]++-- | Generic test given encod enad decode funstions and a+-- list of (plain, encoded) pairs+base64_string_test :: (ByteString -> ByteString)+ -> (ByteString -> Either String ByteString)+ -> [(ByteString, ByteString)] -> [Test]+base64_string_test enc dec testData = concat+ [ [ testCase ("base64-string: Encode " ++ show plain)+ (encoded_plain @?= encoded),+ testCase ("base64-string: Decode " ++ show plain)+ (decoded_encoded @?= Right plain) ]+ | (plain, encoded) <- testData,+ let encoded_plain = enc plain+ decoded_encoded = dec encoded+ ]