diff options
author | Sam T <sta.cs.vsu@gmail.com> | 2013-04-03 01:13:59 +0400 |
---|---|---|
committer | Sam T <sta.cs.vsu@gmail.com> | 2013-04-03 01:13:59 +0400 |
commit | 0ccce42b773783341765ef751ea6d962f70d593c (patch) | |
tree | 6a1e6418edf964c123372e52f03896dda471e26f /tests/info-hash.hs | |
parent | 8f5985915ece236a29fcb340e1e0ef731e3214e9 (diff) |
+ tests
Diffstat (limited to 'tests/info-hash.hs')
-rw-r--r-- | tests/info-hash.hs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/info-hash.hs b/tests/info-hash.hs new file mode 100644 index 00000000..1e511e43 --- /dev/null +++ b/tests/info-hash.hs | |||
@@ -0,0 +1,49 @@ | |||
1 | {-# LANGUAGE OverloadedStrings #-} | ||
2 | module Main (main) where | ||
3 | |||
4 | import Control.Applicative | ||
5 | import Data.Foldable | ||
6 | import Data.Maybe | ||
7 | import qualified Data.Map as M | ||
8 | import Data.ByteString (ByteString) | ||
9 | import qualified Data.ByteString as B | ||
10 | import qualified Data.ByteString.Lazy as L | ||
11 | import qualified Data.ByteString.Builder as B | ||
12 | import qualified Data.ByteString.Builder.Prim as B | ||
13 | |||
14 | import System.Environment | ||
15 | |||
16 | import Data.Torrent | ||
17 | import Data.BEncode | ||
18 | |||
19 | |||
20 | checkInfo :: B.ByteString | ||
21 | checkInfo = "0221caf96aa3cb94f0f58d458e78b0fc344ad8bf" | ||
22 | |||
23 | -- | _should_ be 'id' if content is correct | ||
24 | reencode :: B.ByteString -> Result L.ByteString | ||
25 | reencode content = (encode . toBEncode . (`asTypeOf` (undefined :: Torrent))) | ||
26 | `fmap` (fromBEncode =<< decode content) | ||
27 | |||
28 | ppHex :: B.ByteString -> B.ByteString | ||
29 | ppHex = L.toStrict . B.toLazyByteString . foldMap (B.primFixed B.word8HexFixed) . B.unpack | ||
30 | |||
31 | chunk :: Int -> B.ByteString -> [B.ByteString] | ||
32 | chunk size b | B.length b == 0 = [b] | ||
33 | | otherwise = | ||
34 | let (x, xs) = B.splitAt size b | ||
35 | in x : chunk size xs | ||
36 | |||
37 | showInfos :: ByteString -> (TorrentInfo, BEncode) | ||
38 | showInfos bs = | ||
39 | let Right (be@(BDict dict)) = decode bs | ||
40 | Right t = tInfo <$> (fromBEncode be) | ||
41 | orig = BDict $ let BDict info = fromJust (M.lookup "info" dict) | ||
42 | in M.insert "pieces" (BString "") info | ||
43 | in (t { tPieces = "" }, orig) | ||
44 | |||
45 | main :: IO () | ||
46 | main = do | ||
47 | [path] <- getArgs | ||
48 | Right t <- fromFile path | ||
49 | B.putStrLn (ppHex (tInfoHash t)) | ||