on master help sign in
Add a beginning performance test.
cf45122Bryan O'Sullivan
tests/Makefile+10−4
@@ -1,6 +1,7 @@
1version := $(shell awk '/^version:/{print $$2}' ../text.cabal)
1version := $(shell awk '/^version:/{print $$2}' ../text.cabal)
2ghc := ghc
2ghc := ghc
3+ghc-opt-flags = -O0
3−ghc-base-flags := -O0 -funbox-strict-fields \
4+ghc-base-flags := -funbox-strict-fields -package criterion \
4 -package bytestring -package QuickCheck -package test-framework \
5 -package bytestring -package QuickCheck -package test-framework \
5 -package test-framework-quickcheck -ignore-package text
6 -package test-framework-quickcheck -ignore-package text
6ghc-base-flags += -Wall -fno-warn-orphans -fno-warn-missing-signatures
7ghc-base-flags += -Wall -fno-warn-orphans -fno-warn-missing-signatures
@@ -33,10 +34,14 @@ QuickCheckUtils.o: $(lib)
33qc: Properties.o QuickCheckUtils.o
34qc: Properties.o QuickCheckUtils.o
34 $(ghc) $(ghc-flags) -threaded -o $@ $^ $(lib)
35 $(ghc) $(ghc-flags) -threaded -o $@ $^ $(lib)
35
36
37+sb: SearchBench.o
38+ $(ghc) $(ghc-flags) -threaded -o $@ $^ $(lib)
39+
36qc-hpc: Properties.hs QuickCheckUtils.hs $(lib-srcs:%=../%)
40qc-hpc: Properties.hs QuickCheckUtils.hs $(lib-srcs:%=../%)
37 -mkdir -p hpcdir
41 -mkdir -p hpcdir
38 @rm -f $@.tix
42 @rm -f $@.tix
39− $(ghc) $(ghc-hpc-flags) -ihpcdir --make -threaded -o $@ $<
43+ $(ghc) $(ghc-hpc-flags) $(ghc-opt-flags) -ihpcdir \
44+ --make -threaded -o $@ $<
40
45
41coverage: qc-hpc-html/hpc_index.html
46coverage: qc-hpc-html/hpc_index.html
42
47
@@ -46,11 +51,12 @@ qc-hpc-html/hpc_index.html: qc-hpc
46 --exclude=Data.Text.Fusion.CaseMapping \
51 --exclude=Data.Text.Fusion.CaseMapping \
47 --exclude=QuickCheckUtils --srcdir=.. --srcdir=. --destdir=$(dir $@)
52 --exclude=QuickCheckUtils --srcdir=.. --srcdir=. --destdir=$(dir $@)
48
53
54+SearchBench.o: ghc-opt-flags = -O
49%.o: %.hs
55%.o: %.hs
50− $(ghc) $(ghc-flags) -c -o $@ $<
56+ $(ghc) $(ghc-flags) $(ghc-opt-flags) -c -o $@ $<
51
57
52hpcdir/%.o: %.hs
58hpcdir/%.o: %.hs
53− $(ghc) $(ghc-hpc-flags) --make -c -o $@ $<
59+ $(ghc) $(ghc-hpc-flags) $(ghc-opt-flags) --make -c -o $@ $<
54
60
55.PHONY: testdata
61.PHONY: testdata
56testdata: text-testdata.tar.bz2
62testdata: text-testdata.tar.bz2
tests/Properties.hs+2
@@ -345,6 +345,7 @@ s_drop n = L.drop n `eqP` (unpackS . S.drop n)
345sf_drop p n = (L.drop n . L.filter p) `eqP` (unpackS . S.drop n . S.filter p)
345sf_drop p n = (L.drop n . L.filter p) `eqP` (unpackS . S.drop n . S.filter p)
346t_drop n = L.drop n `eqP` (unpackS . T.drop n)
346t_drop n = L.drop n `eqP` (unpackS . T.drop n)
347tl_drop n = L.drop n `eqP` (unpackS . TL.drop (fromIntegral n))
347tl_drop n = L.drop n `eqP` (unpackS . TL.drop (fromIntegral n))
348+s_take_drop n = (L.take n . L.drop n) `eqP` (unpackS . S.take n . S.drop n)
348s_takeWhile p = L.takeWhile p `eqP` (unpackS . S.takeWhile p)
349s_takeWhile p = L.takeWhile p `eqP` (unpackS . S.takeWhile p)
349sf_takeWhile q p = (L.takeWhile p . L.filter q) `eqP` (unpackS . S.takeWhile p . S.filter q)
350sf_takeWhile q p = (L.takeWhile p . L.filter q) `eqP` (unpackS . S.takeWhile p . S.filter q)
350t_takeWhile p = L.takeWhile p `eqP` (unpackS . T.takeWhile p)
351t_takeWhile p = L.takeWhile p `eqP` (unpackS . T.takeWhile p)
@@ -732,6 +733,7 @@ tests = [
732 testProperty "sf_drop" sf_drop,
733 testProperty "sf_drop" sf_drop,
733 testProperty "t_drop" t_drop,
734 testProperty "t_drop" t_drop,
734 testProperty "tl_drop" tl_drop,
735 testProperty "tl_drop" tl_drop,
736+ testProperty "s_take_drop" s_take_drop,
735 testProperty "s_takeWhile" s_takeWhile,
737 testProperty "s_takeWhile" s_takeWhile,
736 testProperty "sf_takeWhile" sf_takeWhile,
738 testProperty "sf_takeWhile" sf_takeWhile,
737 testProperty "t_takeWhile" t_takeWhile,
739 testProperty "t_takeWhile" t_takeWhile,
tests/SearchBench.hsnew file+79
@@ -0,0 +1,79 @@
1+{-# LANGUAGE OverloadedStrings #-}
2+
3+import Criterion.Main
4+import Data.Text.Search
5+import qualified Data.Text as T
6+
7+main = defaultMain [
8+ bench "big/fast" $ (length . search indices)
9+ , bench "big/slow" $ (length . search slowIndices)
10+ , bench "dna/fast" $ (length . searchDNA indices)
11+ , bench "dna/slow" $ (length . searchDNA slowIndices)
12+ ]
13+
14+search f n = f needle' haystack
15+ where
16+ needle' = T.drop (n `mod` 20) needle
17+ needle = T.replicate 10 "abcdefghijklmnopqrstuvwxyz"
18+ haystack = T.replicate 100 $
19+ T.concat [ T.replicate 1000 "def"
20+ , needle
21+ , T.replicate 1000 "123"
22+ ]
23+
24+searchDNA f n = f needle haystack
25+ where
26+ needle = T.take 4 . T.drop (n `mod` (T.length dna - 4)) $ dna
27+ haystack = T.replicate 100 dna
28+
29+dna = "\
30+\CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGTTGAGATCACATAATAATTGATCGGGTT\
31+\AATCTGGAGGATCTGTTTACTTTGGTCACCCATGAGCATTTGCTGTTGAAGTGACCTAGAATTGCCATCG\
32+\AGCCTCCTTGGGAGCTTTCTTGTTGGCGAGATCTAAACCCTTGCCCGGCGCAGTTTTGCTCCAAGTCGTT\
33+\TGACACATAATTGGTGAAGGGGGTGGCATCCTTCCCTGACCCTCCCCCAACTATTTTTTTAACAACTCTC\
34+\AGCAACGGAGACTCAGTCTTCGGCAAATGCGATAAATGGTGTGAATTGCAGAATCCCGTGCACCATCGAG\
35+\TCTTTGAACGCAAGTTGCGCCCGAGGCCATCAGGCCAAGGGCACGCCTGCCTGGGCATTGCGAGTCATAT\
36+\CTCTCCCTTAACGAGGCTGTCCATACATACTGTTCAGCCGGTGCGGATGTGAGTTTGGCCCCTTGTTCTT\
37+\TGGTACGGGGGGTCTAAGAGCTGCATGGGCTTTTGATGGTCCTAAATACGGCAAGAGGTGGACGAACTAT\
38+\GCTACAACAAAATTGTTGTGCAGAGGCCCCGGGTTGTCGTATTAGATGGGCCACCGTAATCTGAAGACCC\
39+\TTTTGAACCCCATTGGAGGCCCATCAACCCATGATCAGTTGATGGCCATTTGGTTGCGACCCCAGGTCAG\
40+\GTGAGCAACAGCTGTCGTAACAAGGTTTCCGTAGGGTGAACTGCGGAAGGATCATTGTTGAGATCACATA\
41+\ATAATTGATCGAGTTAATCTGGAGGATCTGTTTACTTGGGTCACCCATGGGCATTTGCTGTTGAAGTGAC\
42+\CTAGATTTGCCATCGAGCCTCCTTGGGAGCATCCTTGTTGGCGATATCTAAACCCTCAATTTTTCCCCCA\
43+\ATCAAATTACACAAAATTGGTGGAGGGGGTGGCATTCTTCCCTTACCCTCCCCCAAATATTTTTTTAACA\
44+\ACTCTCAGCAACGGATATCTCAGCTCTTGCATCGATGAAGAACCCACCGAAATGCGATAAATGGTGTGAA\
45+\TTGCAGAATCCCGTGAACCATCGAGTCTTTGAACGCAAGTTGCGCCCGAGGCCATCAGGCCAAGGGCACG\
46+\CCTGCCTGGGCATTGCGAGTCATATCTCTCCCTTAACGAGGCTGTCCATACATACTGTTCAGCCGGTGCG\
47+\GATGTGAGTTTGGCCCCTTGTTCTTTGGTACGGGGGGTCTAAGAGATGCATGGGCTTTTGATGGTCCTAA\
48+\ATACGGCAAGAGGTGGACGAACTATGCTACAACAAAATTGTTGTGCAAAGGCCCCGGGTTGTCGTATAAG\
49+\ATGGGCCACCGATATCTGAAGACCCTTTTGGACCCCATTGGAGCCCATCAACCCATGTCAGTTGATGGCC\
50+\ATTCGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGTTGAGATCACATAATAATTGATCGA\
51+\GTTAATCTGGAGGATCTGTTTACTTGGGTCACCCATGGGCATTTGCTGTTGAAGTGACCTAGATTTGCCA\
52+\TCGAGCCTCCTTGGGAGCTTTCTTGTTGGCGATATCTAAACCCTTGCCCGGCAGAGTTTTGGGAATCCCG\
53+\TGAACCATCGAGTCTTTGAACGCAAGTTGCGCCCGAGGCCATCAGGCCAAGGGCACGCCTGCCTGGGCAT\
54+\TGCGAGTCATATCTCTCCCTTAACGAGGCTGTCCATACACACCTGTTCAGCCGGTGCGGATGTGAGTTTG\
55+\GCCCCTTGTTCTTTGGTACGGGGGGTCTAAGAGCTGCATGGGCTTTTGATGGTCCTAAATACGGCAAGAG\
56+\GTGGACGAACTATGCTACAACAAAATTGTTGTGCAAAGGCCCCGGGTTGTCGTATTAGATGGGCCACCAT\
57+\AATCTGAAGACCCTTTTGAACCCCATTGGAGGCCCATCAACCCATGATCAGTTGATGGCCATTTGGTTGC\
58+\GACCCAGTCAGGTGAGGGTAGGTGAACCTGCGGAAGGATCATTGTTGAGATCACATAATAATTGATCGAG\
59+\TTAATCTGGAGGATCTGTTTACTTTGGTCACCCATGGGCATTTGCTGTTGAAGTGACCTAGATTTGCCAT\
60+\CGAGCCTCCTTGGGAGCTTTCTTGTTGGCGAGATCTAAACCCTTGCCCGGCGGAGTTTGGCGCCAAGTCA\
61+\TATGACACATAATTGGTGAAGGGGGTGGCATCCTGCCCTGACCCTCCCCAAATTATTTTTTTAACAACTC\
62+\TCAGCAACGGATATCTCGGCTCTTGCATCGATGAAGAACGCAGCGAAATGCGATAAATGGTGTGAATTGC\
63+\AGAATCCCGTGAACCATCGAGTCTTTGGAACGCAAGTTGCGCCCGAGGCCATCAGGCCAAGGGCACGCCT\
64+\GCCTGGGCATTGGGAATCATATCTCTCCCCTAACGAGGCTATCCAAACATACTGTTCATCCGGTGCGGAT\
65+\GTGAGTTTGGCCCCTTGTTCTTTGGTACCGGGGGTCTAAGAGCTGCATGGGCATTTGATGGTCCTCAAAA\
66+\CGGCAAGAGGTGGACGAACTATGCCACAACAAAATTGTTGTCCCAAGGCCCCGGGTTGTCGTATTAGATG\
67+\GGCCACCGTAACCTGAAGACCCTTTTGAACCCCATTGGAGGCCCATCAACCCATGATCAGTTGATGACCA\
68+\TTTGTTGCGACCCCAGTCAGCTGAGCAACCCGCTGAGTGGAAGGTCATTGCCGATATCACATAATAATTG\
69+\ATCGAGTTAATCTGGAGGATCTGTTTACTTGGTCACCCATGAGCATTTGCTGTTGAAGTGACCTAGATTT\
70+\GCCATCGAGCCTCCTTGGGAGTTTTCTTGTTGGCGAGATCTAAACCCTTGCCCGGCGGAGTTGTGCGCCA\
71+\AGTCATATGACACATAATTGGTGAAGGGGGTGGCATCCTGCCCTGACCCTCCCCAAATTATTTTTTTAAC\
72+\AACTCTCAGCAACGGATATCTCGGCTCTTGCATCGATGAAGAACGCAGCGAAATGCGATAAATGGTGTGA\
73+\ATTGCAGAATCCCGTGAACCATCGAGTCTTTGAACGCAAGTTGCGCCCGAGGCCATCAGGCCAAGGGCAC\
74+\GCCTGCCTGGGCATTGCGAGTCATATCTCTCCCTTAACGAGGCTGTCCATACATACTGTTCATCCGGTGC\
75+\GGATGTGAGTTTGGCCCCTTGTTCTTTGGTACGGGGGGTCTAAGAGCTGCATGGGCATTTGATGGTCCTC\
76+\AAAACGGCAAGAGGTGGACGAACTATGCTACAACCAAATTGTTGTCCCAAGGCCCCGGGTTGTCGTATTA\
77+\GATGGGCCACCGTAACCTGAAGACCCTTTTGAACCCCATTGGAGGCCCATCAACCCATGATCAGTTGATG\
78+\ACCATGTGTTGCGACCCCAGTCAGCTGAGCAACGCGCTGAGCGTAACAAGGTTTCCGTAGGTGGACCTCC\
79+\GGGAGGATCATTGTTGAGATCACATAATAATTGATCGAGGTAATCTGGAGGATCTGCATATTTTGGTCAC"