File: uri-bench.hs

package info (click to toggle)
haskell-network-uri 2.6.4.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 192 kB
  • sloc: haskell: 2,207; makefile: 3
file content (59 lines) | stat: -rw-r--r-- 2,068 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# LANGUAGE BangPatterns #-}
--------------------------------------------------------------------------------
--  $Id: URITest.hs,v 1.8 2005/07/19 22:01:27 gklyne Exp $
--
--  Copyright (c) 2004, G. KLYNE.  All rights reserved.
--  See end of this file for licence information.
--------------------------------------------------------------------------------
-- |
--  Module      :  URITest
--  Copyright   :  (c) 2004, Graham Klyne
--  License     :  BSD-style (see end of this file)
--
-- Performance benchmarks for the network-uri package.
--
--------------------------------------------------------------------------------

module Main where

import Network.URI
    ( parseURI
    , parseURIReference
    , pathSegments
    , relativeFrom
    , relativeTo
    , isReserved
    )

import Criterion.Main
import Control.DeepSeq

main = defaultMain [
    let Just !u = force (parseURI "http://ezample.org/foo/bar/baz//wimple/dimple/simple") in
    bgroup "pathSegments" [
       bench "head" $ nf head (pathSegments u)
     , bench "tail" $ nf tail (pathSegments u)
    ]
  , bgroup "relativeFrom" [
      let Just !u1 = force (parseURI "http://ex.it/foo/bar/baz/bop") in
      let Just !u2 = force (parseURI "http://ex.it/foo/bar/baz/bap") in
      bench "same 4" $ nf (relativeFrom u1) u2
    , let Just !u1 = force (parseURI "http://ex.it/foo/bar/biz/bop") in
      let Just !u2 = force (parseURI "http://ex.it/foo/bar/baz/bap") in
      bench "different 4" $ nf (relativeFrom u1) u2
    ]
  , bgroup "relativeTo" [
      let Just !u1 = force (parseURIReference "../../biz/../biz/./bop") in
      let Just !u2 = force (parseURI "http://ex.it/foo/bar/baz/bap") in
      bench "dots and double dots" $ nf (relativeTo u1) u2
    ]
  , -- Prompted by https://github.com/haskell/network-uri/pull/46
    bgroup "isReserved" [
      bench "isReserved a" $ nf isReserved 'a'
      , bench "isReserved :" $ nf isReserved ':'
    ]
  ,
    bench "parseURI" $
      nf parseURI "http://foo@bar.quix.gov/flip/flop?a=b&c=d"
  ]