簡體   English   中英

Haskell,IO,monads,quickcheck

[英]Haskell, IO, monads, quickcheck

Haskell的初學者在這里。

我有一個函數,以及一堆用於測試的屬性,這些屬性是我使用quickcheck編寫的。 當我在解釋器中分別運行屬性時,這些屬性便可以工作,並且該函數可以很好地進行檢查。

但是,手動對解釋器中的每個屬性進行手動快速檢查(quickCheck prop_this,quickCheck prop_that)很無聊,單調且耗時。 我想將所有這些都保留在一個程序中,並讓該程序運行所有的快速檢查。 這就是我卡住的地方。

該程序的基本框架如下:

imports...

function_which_i_want_to_quickcheck

prop_1
prop_2
etc...

main = do
    quickCheck prop_1
    quickCheck prop_2
    etc...

我相信main之上的所有內容都可以,因為沒有它,它可以編譯和運行。 主要是我需要幫助的地方。 我嘗試了幾種變體,例如,沒有做,使用做,使用'x <-quickCheck y'分配結果,從內部移除quickCheck並將其粘貼在外部等,但無法進行任何操作工作。

  1. 任何人都可以協助上述工作嗎?

  2. 如果我想將main內部的所有內容移動到另一個(正常的非main函數)中,該怎么辦?

編輯:我感謝有關測試框架的建議,但是我在這里要問的是用任何其他語言進行的瑣碎工作,並且不需要測試框架。 為什么不選擇Haskell?

同樣,這在解釋器內部也可以正常工作。 我無法在main內部工作。 有什么想法嗎?

quickCheck prop_1 >> quickCheck prop_2 >> quickCheck prop_3

謝謝。

這是不是從你有什么問題,問題很清楚,但一般我會建議使用一個測試框架,比如可口 ,組織你的快速檢查測試在一起:

import Test.Tasty
import Test.Tasty.QuickCheck

main = defaultMain $ testGroup "Tests"
  [ testProperty "+ is commutative" $
      \x y -> x + y == (y + x :: Double)
  , testProperty "+ is associative" $
      \x y z -> (x + y) + z == (x + (y + z) :: Double)
  ]

要運行此程序,您需要安裝tasty-quickcheck軟件包。

執行后的外觀如下:

截圖

我過去使用過TestFramework 它允許您創建任意嵌套的測試組,從而為您提供一種更改輸入參數的方法。

main = do
    defaultMain $ [tier1_tests, ...]

tier1_tests = testGroup "Level One Tests" [tier2_tests1, tier2_tests2, ...]

tier2_tests1 = testGroup "Level Two Testgroup 1" [tier3_tests1, youGetTheIdea, ...]
                 ] 
tier3_tests1 = testGroup "Level Three Testgroup" [
        testProperty "m=32 random encoding with good x" (prop_realTest1 8 32 True),
        testProperty "m=256 random encoding bad x" (prop_realTest2 128 256 False),
        ... ]

prop_realTest1 m goodq b = forAll arbitrary (\ x -> ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM