2016-05-27 3 views
3

я создал простой проект стека, и .cabal записи эталонных тестов:Как использовать критерий со стеком

benchmark leaves-of-a-tree-bench 
    type:    exitcode-stdio-1.0 
    hs-source-dirs: src, bench 
    main-is:   MainBenchmarkSuite.hs 
    build-depends: base 
        , criterion 
        , random 
        , leaves-of-a-tree 
    ghc-options:  -Wall 
        -O2 
    default-language: Haskell2010      

Однако после запуска stack bench я получаю следующее сообщение об ошибке:

setup-Simple-Cabal-1.22.5.0-ghc-7.10.3: Error: Could not find benchmark program  
".stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/leaves-of-a-tree-bench/leaves-of-a-tree-bench". 
Did you build the package first? 

Я что-то упускаю?

EDIT: Я загрузил проект a github repository

+0

Die вы пытаетесь сделать 'стека build' ? – epsilonhalbe

+0

Можете ли вы загрузить полный проект с этой проблемой где-нибудь? (Несвязанный: определяя 'leaves-of-a-tree' в вашей' build-depends' и добавляя 'src' к' hs-source-dirs', вы в два раза зависите от своего библиотечного компонента) –

+0

Я попытался создать стек '. Проблема в том, что эталонная программа не найдена. @Jan Спасибо за замечание. Я также загрузил соответствующие файлы в github. –

ответ

1

Здесь происходит какая-то странная вещь.

Ваш LeavesOfATreeBench.hs:

-- | 

module LeavesOfATreeBench where 

import   Criterion.Main 
import   Data.BinTree 

mkTree :: [a] -> BinTree a 
mkTree [] = Nil 
mkTree (x:xs) = Fork x (mkTree lxs) (mkTree rxs) 
    where (lxs, rxs) = splitAt ((length xs + 1) `div` 2) xs 

main :: IO() 
main = defaultMain [ 
    bgroup "leaves" 
    [ bench "tree 0" $ whnf leaves (mkTree ([0 .. 20] :: [Integer])) 
    , bench "tree 1" $ whnf leaves (mkTree ([0 .. 200] :: [Integer])) 
    ] 
    ] 

Теперь, когда я просто удалить строку

module LeavesOfATreeBench where 

все работает, как ожидалось:

Registering leaves-of-a-tree-0.1.0.0... 
leaves-of-a-tree-0.1.0.0: benchmarks 
Running 1 benchmarks... 
Benchmark leaves-of-a-tree-bench: RUNNING... 
benchmarking leaves/tree 0 
time     41.81 ns (41.51 ns .. 42.29 ns) 
        0.999 R² (0.998 R² .. 0.999 R²) 
mean     42.65 ns (42.12 ns .. 43.50 ns) 
std dev    2.293 ns (1.526 ns .. 3.690 ns) 
variance introduced by outliers: 75% (severely inflated) 

benchmarking leaves/tree 1 
time     71.11 ns (70.41 ns .. 71.84 ns) 
        0.999 R² (0.999 R² .. 0.999 R²) 
mean     71.30 ns (70.45 ns .. 72.19 ns) 
std dev    2.917 ns (2.431 ns .. 3.507 ns) 
variance introduced by outliers: 62% (severely inflated) 

Benchmark leaves-of-a-tree-bench: FINISH 
Completed 2 action(s). 
+0

Это похоже на ошибку в Cabal или Stack, не так ли? –

+0

Поскольку Stack использует библиотеку Cabal для большинства материалов для сборки, я бы предположил, что это связано с Cabal. Если это не считается ошибкой, по крайней мере документация должна охватывать это. –

0

Это напоминает мне о том, что происходит, когда у вас нет надлежащего главного модуля. У вас есть «модуль MainBenchmarkSuite» вверху?

Я не могу найти для этого ghc билет, но по какой-то причине ghc рассматривает это как только предупреждение. IIRC разрешен в GHC 8.0

+0

Я думаю, что все в порядке с модулем, содержащим эталонную программу. Однако может быть, что я что-то упустил. Я добавил ссылку на репозиторий github, содержащий проект. Обратите внимание, что я сделал некоторое переименование, пытаясь найти решение. –

+0

Не разрешен в ghc-8.0.1 –

Смежные вопросы