summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSam T <pxqr.sta@gmail.com>2013-05-14 10:57:25 +0400
committerSam T <pxqr.sta@gmail.com>2013-05-14 10:57:25 +0400
commit50490ccb9ac98dc03a499972e693da8514779be6 (patch)
treec19c9eadb07ecc742aa94dff1ccb3556a40bccb5 /tests
parente8ce2092f9738072ddee1a677b5c6e8923f8627e (diff)
~ Move exsamples to tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/Client.hs27
-rw-r--r--tests/Server.hs16
-rw-r--r--tests/Shared.hs50
3 files changed, 93 insertions, 0 deletions
diff --git a/tests/Client.hs b/tests/Client.hs
new file mode 100644
index 00000000..ec86639e
--- /dev/null
+++ b/tests/Client.hs
@@ -0,0 +1,27 @@
1{-# LANGUAGE OverloadedStrings #-}
2module Main (main) where
3
4import qualified Data.ByteString as B
5import System.Environment
6import Remote.KRPC
7import Shared
8
9
10addr :: RemoteAddr
11addr = (0, 6000)
12
13main :: IO ()
14main = do
15 print =<< call addr unitM ()
16 print =<< call addr echoM 0
17 call addr reverseM [1..1000]
18 print =<< call addr swapM (0, 1)
19 print =<< call addr shiftR ((), 1, [2..10])
20 let bs = B.replicate (32 * 1024) 0
21 bs' <- call addr echoBytes bs
22 print (bs == bs')
23
24{-
25 forM_ [1..] $ const $ do
26 async addr myconcat (replicate 100 [1..10])
27-}
diff --git a/tests/Server.hs b/tests/Server.hs
new file mode 100644
index 00000000..f636b0be
--- /dev/null
+++ b/tests/Server.hs
@@ -0,0 +1,16 @@
1{-# LANGUAGE IncoherentInstances #-}
2module Main (main) where
3
4import Remote.KRPC
5import Shared
6
7
8main :: IO ()
9main = server 6000
10 [ unitM ==> return
11 , echoM ==> return
12 , echoBytes ==> return
13 , swapM ==> \(a, b) -> return (b, a)
14 , reverseM ==> return . reverse
15 , shiftR ==> \(a, b, c) -> return (c, a, b)
16 ]
diff --git a/tests/Shared.hs b/tests/Shared.hs
new file mode 100644
index 00000000..e0e5268c
--- /dev/null
+++ b/tests/Shared.hs
@@ -0,0 +1,50 @@
1{-# LANGUAGE OverloadedStrings #-}
2module Shared
3 (echoM, echoBytes, unitM, swapM, reverseM, shiftR
4 ) where
5
6import Data.ByteString (ByteString)
7import Remote.KRPC
8
9unitM :: Method () ()
10unitM = method "unit" [] []
11
12echoM :: Method Int Int
13echoM = method "echo" ["x"] ["x"]
14
15echoBytes :: Method ByteString ByteString
16echoBytes = method "echoBytes" ["x"] ["x"]
17
18reverseM :: Method [Int] [Int]
19reverseM = method "reverse" ["xs"] ["ys"]
20
21swapM :: Method (Int, Int) (Int, Int)
22swapM = method "swap" ["x", "y"] ["b", "a"]
23
24shiftR :: Method ((), Int, [Int]) ([Int], (), Int)
25shiftR = method "shiftR" ["x", "y", "z"] ["a", "b", "c"]
26
27
28
29{-
30type NodeId = Int
31type InfoHashe = Int
32type NodeAddr = Int
33type Token = Int
34type
35
36ping :: Method NodeId NodeId
37ping = method "ping" ["id"] ["id"]
38
39find_node :: Method (NodeId, NodeId) (NodeId, NodeAddr)
40find_node = method "find_node" ["id", "target"] ["id", "nodes"]
41
42get_peers :: Method (NodeId :*: InfoHash) (NodeId, Token, NodeAddr :|: NodeAddr)
43get_peers = method "get_peers"
44 ("id", "target")
45 ("id", "token", view ("values" :|: "nodes"))
46view :: BEncodable -> Maybe BEncodable
47view = undefined
48announce_peer :: Method (NodeId, InfoHash, PortNumber, Token) NodeId
49announce_peer = undefined
50-} \ No newline at end of file