标签: fscheck

防止FsCheck产生NaN和无穷大

我有一个深层嵌套的数据结构,到处都有浮点数.我正在使用FsCheck检查序列化然后反序列化后数据是否未更改.

当float为NaN或+/-无穷大时,此属性失败,但是,这种情况对我不感兴趣,因为我不希望这些值出现在实际数据中.

有没有办法防止FsCheck产生NaN和无穷大?

我已经尝试丢弃包含所述值的生成数据,但是这使得测试非常慢,实际上很慢,在我写这篇文章时测试仍在运行,我怀疑它实际上会完成...

testing floating-point f# generator fscheck

3
推荐指数
2
解决办法
486
查看次数

FsCheck测试更改用于测试的值的范围

我的代码在使用FsCheck时自动测试-99到99之间的值.

Check.Quick test
Run Code Online (Sandbox Code Playgroud)

我的测试函数采用整数值.

我想测试使用1到4999之间的值.

f# fscheck

3
推荐指数
1
解决办法
638
查看次数

使用C#使用FsCheck生成随机字符串

我想逐步将FsCheck集成到我的C#测试代码中(作为第一步).

我想随机生成部分输入数据.

这是我生成随机字符串的方式:


static string RandomString() {
  var kgen = Gen.Constant(Gen.Sized(g => Gen.OneOf(Arb.Generate())));
  var sgen = Gen.Sample(1, 10, kgen).First();
  var str = Gen.Eval(10, Random.StdGen.NewStdGen(0, 1000), sgen);
  return str;
}
Run Code Online (Sandbox Code Playgroud)

如果我多次调用它,我每次都会得到相同的字符串.

如何每次获取不同的字符串和/或正确编写此代码?

c# testing f# fscheck

3
推荐指数
1
解决办法
2052
查看次数

如何在C#中为接口编写FsCheck生成器

假设我有一个带有2个读取属性age(int)和name(string)的接口IPerson.

我还有一个实施IPerson的人员.

如何编写用于生成IPerson类型实例的FsCheck生成器?

c# fscheck

3
推荐指数
1
解决办法
674
查看次数

如何使用FsCheck实现多个参数生成?

如何使用FsCheck实现多个参数生成?

我实现了以下内容以支持多个参数生成:

// Setup
let pieces =    Arb.generate<Piece> |> Gen.filter (isKing >> not)
                                    |> Arb.fromGen  

let positionsList = Arb.generate<Space list> |> Arb.fromGen
Run Code Online (Sandbox Code Playgroud)

然后我使用这些参数来测试一个函数的行为,该函数负责为给定的检查器生成移动选项:

// Test
Prop.forAll pieces <| fun piece ->
    Prop.forAll positionsList <| fun positionsItem ->

        positionsItem |> optionsFor piece 
                      |> List.length <= 2
Run Code Online (Sandbox Code Playgroud)

在管理多个生成的参数类型时,是否将Prop.forAll表达式嵌套为正确的技术?

是否有替代方法为被测函数生成多个参数?

这是整个功能:

open FsCheck
open FsCheck.Xunit

[<Property(QuietOnSuccess = true)>]
let ``options for soldier can never exceed 2`` () =

    // Setup
    let pieces =    Arb.generate<Piece> |> Gen.filter (isKing >> not)
                                        |> Arb.fromGen  

    let positionsList …
Run Code Online (Sandbox Code Playgroud)

f# fscheck fsunit

3
推荐指数
1
解决办法
248
查看次数

为什么使用向后管道运算符解决编译错误?

编译器接受以下行:

input |> Prop.forAll <| fun (a , b) -> add a b = add b a
Run Code Online (Sandbox Code Playgroud)

但是,当我用括号替换向后pipline运算符时,我收到一个错误:

input |> Prop.forAll ( fun (a , b) -> add a b = add b a )
Run Code Online (Sandbox Code Playgroud)

类型不匹配.期待任意 - >'a但给定a('b - >'c) - >属性"任意"类型与"a - >"b类型不匹配

我不太清楚这个错误意味着什么.为什么向后管道操作符编译但括号不编译?

附录:

module Arithmetic

let add a b =
    a + b

open FsCheck
open FsCheck.Xunit

[<Property(MaxTest=1000, QuietOnSuccess=true)>]
let ``'a + 'b equals 'b + 'a`` () =

    // Declare generators per type required for function …
Run Code Online (Sandbox Code Playgroud)

f# fscheck

3
推荐指数
1
解决办法
91
查看次数

如何组合2个任意实例以匹配测试方法签名

我有一个函数,应该得到两个实际参数进行测试.这两个值都应该由任意实例创建,因为它们需要具有一些不能完全随意的良好形式.
所以我创建了以下代码

let updating (x:SomeType) (y:SomeOtherType) =
    let result = update x y
    result.someProp = x.someProp
    && result.otherProp = y.otherProp

let arbSomeType = 
    Arb.generate<SomeType> 
        |> Gen.filter fun x -> x.checkSomeStuff
        |> Arb.fromGen

let arbSomeType = 
    Arb.generate<SomeOtherType> 
        |> Gen.filter fun x -> x.checkPropertiesOfThis
        |> Arb.fromGen
Run Code Online (Sandbox Code Playgroud)

但是,我现在如何组合这两个任意实例,以便它们与测试方法的签名相匹配?

//let prop = Prop.forAll arbSomeType + arbSomeType updating

Check.QuickThrowOnFailure prop
Run Code Online (Sandbox Code Playgroud)

f# fscheck

3
推荐指数
1
解决办法
93
查看次数

如何定义FSCheck生成器以便可以发现它

我正在编写FSCheck生成器来创建具有以下属性的字符串:

  • 它们是非空的
  • 修剪它们不会影响长度
  • 它们不包含空格.

这是我的生成器代码:

namespace Example

open FsCheck.Arb

module public Generation = 

    let hasChars (s : string) =
        (isNull s |> not)
        && s.Length > 0

    let isTrimmed (s : string) =
        s.Trim().Length = s.Length

    let isContinuous (s : string) =
        s
        |> Seq.exists ((=) ' ')
        |> not

    [<AbstractClass; Sealed>]
    type public Generators = class end

    type public ContinuousString = ContinuousString of string with
        member x.Get = match x with ContinuousString r -> r
        override x.ToString() = x.Get …
Run Code Online (Sandbox Code Playgroud)

f# fscheck

3
推荐指数
1
解决办法
284
查看次数

如何使用fscheck生成数据?

是否可以使用fscheck生成数据,特别是列表,以便在fscheck之外使用?我无法调试fscheck测试中的情况,看起来比较结果是相同的,但fscheck说它们不是.

我有这个生成器用于对象列表.如何生成可以从此生成器使用的列表?

let genListObj min max  = Gen.listOf Arb.generate<obj> |> Gen.suchThat (fun l -> (l.Length >= min) && (l.Length <= max))
Run Code Online (Sandbox Code Playgroud)

f# fscheck

2
推荐指数
1
解决办法
1031
查看次数

为什么我在基于属性的测试中收到"无参数提供"错误?

以下测试失败:

open FsCheck
open FsCheck.NUnit
open NUnit.Framework

let ``Property: double negation equals no negation`` list =
    list = List.rev (List.rev list)

[<Test>]
let ``reversing list two times is equal to not reversing list at all`` list = 
    Check.Quick ``Property: double negation equals no negation``
Run Code Online (Sandbox Code Playgroud)

错误:

消息:未提供任何参数

我认为FsCheck会在每次测试迭代时为我提供论据.

我正在引用以下文档.

f# nunit-2.5 fscheck

2
推荐指数
1
解决办法
386
查看次数

标签 统计

fscheck ×10

f# ×9

c# ×2

testing ×2

floating-point ×1

fsunit ×1

generator ×1

nunit-2.5 ×1