Параметры командной строки, выбранные библиотекой критериев - PullRequest
7 голосов
/ 08 декабря 2011

Я использовал критерий библиотек и cmdargs.

Когда я полностью компилирую программу без cmdargs и запускаю ее, например ./prog --help, тогда я получаю нежелательный ответ от критерия о возможных опциях иколичество прогонов и т. д.

Когда я компилирую и запускаю его, как показано ниже, параметры командной строки сначала выбираются моим кодом, а затем считываются по критерию.Затем Criterion сообщает об ошибке и сообщает, что опция --byte неизвестна.Я не видел ничего в документации по критерию, как это можно было бы отключить или обойти.Есть ли способ очистить параметры командной строки, которые я прочитал?В противном случае мне нужно было бы использовать, например, CPUTime вместо критерия, это нормально для меня, поскольку я действительно требую множество дополнительных функций и данных, которые предоставляет критерий.

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}

import System.Console.CmdArgs

data Strlen = Strlen {byte :: Int} deriving (Data, Typeable, Show)

strlen = cmdArgsMode $ Strlen {byte = def} &= summary "MessagePack benchmark v0.04"

main = do
  n <- cmdArgsRun strlen
  let datastring = take (byte n) $ randomRs ('a','z') (mkStdGen 3)
  putStrLn "Starting..."
  conn <- connect "192.168.35.62" 8081
  defaultMain [bench "sendReceive" $ whnfIO (mywl conn datastring)] 

Ответы [ 2 ]

11 голосов
/ 08 декабря 2011

Используйте System.Environment.withArgs. Сначала проанализируйте аргументы командной строки с помощью cmdArgs, а затем передайте то, что вы не использовали, criterion:

main = do
    (flags, remaining) <- parseArgsHowever
    act according to flags
    withArgs remaining $
        defaultMain [ ... ]
3 голосов
/ 08 декабря 2011

Взгляните на источник критерия . Вы должны быть в состоянии написать свою собственную defaultMainWith функцию, которая обрабатывает аргументы так, как вы хотите, включая их игнорирование или игнорирование неизвестных аргументов и т. Д. *

...