问题标签 [htf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
265 浏览

testing - cabal、HTF 和 HUnit 断言的奇怪之处

所以我正在尝试使用 HTF 来运行一些 HUnit 风格的断言

当我使用时ghc --make,它似乎可以正常工作。

但是当我使用 cabal 构建它时,并不是所有应该失败的测试都会失败。

出了什么问题,我该如何解决?

0 投票
1 回答
1245 浏览

testing - 使用 HTF 进行测试

令人难以置信的是,缺乏关于 HTF 的像样的文档。我能找到的只是一个教程,它没有提供以下任何真正重要的信息:

  1. 如何创建一个自动执行包中所有测试的测试套件?
  2. HTF 的那些“黑盒测试”到底是什么,我如何创建它们?
  3. 建立基于 HTF(源根、包和模块结构、cabal)的测试套件的实际标准是什么?
0 投票
1 回答
446 浏览

testing - Haskell 测试框架 (HTF) 和多个模块中的测试定义

HTF 有一个示例项目,展示了如何使用测试框架。模块 MyPkg.A 定义了一些测试,MyPkg.B 定义了一些测试。是否可以编写新模块 MyPkg.C 来聚合来自模块 A 和 B 的测试(并且不定义新测试本身)?

我不想从 A 和 B (在我的测试运行程序 Main 模块中)导入测试,而是从单个 C 模块导入测试。

我这样实现 MyPkg.C

我的主要测试运行模块是这样的:

当我尝试编译此代码时,出现错误:

0 投票
1 回答
1067 浏览

haskell - 使用 Cabal 安装 HTF 时遇到问题

我正在尝试安装 HTF。但是在cabal install HTF我得到这个之后:

我尝试安装其他版本,但遇到了不同的问题。例如,cabal install 'HTF <= 0.1'我得到以下信息:

我也得到了类似于之后的第一个结果cabal install 'HTF <= 0.9'。我试过ghc-pkg check了,它给了我一个破损包裹的清单。我重新安装了软件包并重复尝试再次安装 HTF,结果相同。

0 投票
2 回答
936 浏览

testing - Test.QuickCheck:加快测试同一类型的多个属性

我正在测试一个随机生成器,生成我自己类型的实例。为此,我有一个自定义实例Arbitrary

这适用于Test.QuickCheck(实际上Test.Framework)测试生成的值是否具有某些属性。但是,我要检查的属性很多,添加的越多,验证它们所需的时间就越多。

有没有办法使用相同的生成值来测试每个属性,而不是每次都重新生成它们?我显然仍然想看看,在失败时,哪个属性不成立,所以制作一个巨大的属性and并不是最优的。

0 投票
0 回答
274 浏览

macos - 无法使用 cabal 在 osx 上安装 HTF

我已经看到这个关于安装 HTF 和错误的问题cpphs,但它似乎并不适用。我在两台单独的 osx 机器上进行了 100% 全新的 haskell 平台安装,并尝试这样做cabal install htf --global(在安装cpphs并将其添加到路径之后),但我仍然收到此错误。如何让 HTF 安装?


的输出cabal install -v HTF

0 投票
3 回答
139 浏览

haskell - HTF 不测试 TH 生成的道具

我想对我库中的各种类型进行许多类似的测试。

为了简化事情,假设我有许多矢量类型实现Num类,并且我想生成相同的 QuickCheck 属性检查prop_absNorm x y = abs x + abs y >= abs (x+y),该检查将适用于库中的所有类型。

我使用 TH 生成这样的属性:

我生成测试的函数具有以下签名:

此函数通过查找我的向量类的所有实例VectorMath (n::Nat) t(以及同时查找 的实例Numreify ''VectorMath并相应地生成所有 prop 函数。 -ddump-splices显示如下内容:

问题是检查了所有手动编写的属性,但没有检查生成的属性。

注意 1:我在同一个文件中生成了和未生成的属性(即 TH 表达式$(..)与其他道具在同一个文件中)。

注 2:用于创建 prop 函数的类型列表是可变的 - 我想VectorMath稍后添加其他实例,因此它们会自动添加到测试列表中。

我认为问题在于 HTF(可能也使用 TH)解析原始文件,而不是生成代码的文件 - 但我不明白为什么会发生这种情况。

所以我的问题是:如何解决这个问题?如果无法使用 TH 生成的道具,那么是否可以对各种类型进行 QuickCheck 测试(即,将它们替换为prop_absNorm :: Vector 4 a -> Vector 4 a -> Bool)?

另一种选择可能是进一步使用 TH 手动将测试条目添加到 htf_Main,但我还没有弄清楚如何做到这一点;它看起来不像是一个干净的解决方案。

0 投票
0 回答
106 浏览

haskell - Cabal testsuite - How can I pass a flag?

I use cabal with test-suites. The processor I use (HTF) allows flags (e.g. --quiet). How can I add such flags in the cabal file in order to be passed automatically to the test suite program when it is executed?

0 投票
2 回答
535 浏览

haskell - 如何报告失败的测试用例

我通过 Stack 使用 Haskell 测试框架来评估 QuickCheck 属性。当我运行时stack test,失败的属性以Gave up! Passed only 95 tests. 我发现的许多属性测试示例都以失败Falsifiable, after 48 tests的参数的形式报告失败。然而,这些示例似乎直接运行 QuickCheck,而不是通过 Stack 和 HTF。

如何配置我的环境以报告由 QuickCheck 生成的不满足被测属性的参数?正如在使用 HTF 进行测试中指出的那样,仅对于其中一些工具来说,文档已经很少而且很差,更不用说将它们组合在一起了。

0 投票
0 回答
35 浏览

htf - 更高的时间范围数据

这是我的代码。我试图在柱线关闭时获得更高的时间范围数据,以便我做出交易决定。但由于某种原因,它滞后了。我首先在较短的时间范围内对其进行测试,看看它是否有效。我将脚本添加到 1m 图表并从 5m 图表中获取数据,但由于某种原因,它没有立即获得最新的 5m 柱收盘信息。我究竟做错了什么?我只是出于调试目的在图表上打印值。

// 此源代码受 Mozilla Public License 2.0 条款的约束,网址为https://mozilla.org/MPL/2.0/

//@version=5 strategy("HTF 数据", overlay=true)

HTF = "5"

HTFClose = request.security(syminfo.tickerid, HTF, close[1], gaps = barmerge.gaps_off, lookahead=barmerge.lookahead_on) HTFClose2 = request.security(syminfo.tickerid, HTF, close[2], gaps = barmerge. gaps_off,lookahead=barmerge.lookahead_on)

// MA HTFEMA1 = request.security(syminfo.tickerid, HTF, ta.ema(close[1], 8), gaps = barmerge.gaps_off, lookahead=barmerge.lookahead_on) HTFEMA2 = request.security(syminfo.tickerid, HTF , ta.ema(close[2], 8), gaps = barmerge.gaps_off, lookahead=barmerge.lookahead_on)

// MACD, Signal 和 Hist [macdLineD, signalLineD, histLineD] = request.security(syminfo.tickerid, HTF, ta.macd(close[1], 8, 21, 9), gaps = barmerge.gaps_off, lookahead=barmerge .lookahead_on)

var testTable = table.new(position = position.top_right, columns = 1, rows = 7, bgcolor = color.yellow, border_width = 1) if barstate.islast table.cell(table_id = testTable, column = 0, row = 0 , text = "HTFClose:" + str.tostring(HTFClose)) table.cell(table_id = testTable, column = 0, row = 1, text = "HTFClose2:" + str.tostring(HTFClose2), bgcolor=color.white ) table.cell(table_id = testTable, column = 0, row = 2, text = "HTFEMA1:" + str.tostring(HTFEMA1)) table.cell(table_id = testTable, column = 0, row = 3, text = " HTFEMA2: " + str.tostring(HTFEMA2), bgcolor=color.white) table.cell(table_id = testTable, column = 0, row = 4, text = "macdLineD: " + str.tostring(macdLineD), bgcolor=color .red )
table.cell(table_id = testTable, column = 0, row = 5, text = "signalLineD:"+ str.tostring(signalLineD), bgcolor=color.white)
table.cell(table_id = testTable, column = 0, row = 6, text = "histLineD:" + str.tostring(histLineD))