From 050c555777ed4c534152c9aa4a2c148929850ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20F=20Schrauf?= Date: Tue, 27 Dec 2016 10:38:30 -0300 Subject: [PATCH 1/6] Update for julia v0.5 Most importantly, changed inspection of lambda function --- src/QuickCheck.jl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/QuickCheck.jl b/src/QuickCheck.jl index 6c63614..6ec22a4 100644 --- a/src/QuickCheck.jl +++ b/src/QuickCheck.jl @@ -10,10 +10,15 @@ export condproperty export quantproperty function lambda_arg_types(f::Function) - if !isa(f.code, LambdaStaticData) + if !isa(f, Function) error("You must supply either an anonymous function with typed arguments or an array of argument types.") end - [eval(var.args[2]) for var in Base.uncompressed_ast(f.code).args[1]] + # [eval(var.args[2]) for var in Base.uncompressed_ast(f.code).args[1]] + c = methods(f).ms + if length(c) != 1 + error("The function must have one, and only one mehtod.") + end + [c[1].sig.parameters[2:end]...] end # Simple properties @@ -43,7 +48,7 @@ function check_property(prop::Function, arggens, argconds, ntests, maxtests) totalTests = 0 for i in 1:ntests goodargs = false - args = {} + args = [] while !goodargs totalTests += 1 if totalTests > maxtests @@ -63,7 +68,7 @@ end # Default generators for primitive types generator{T<:Unsigned}(::Type{T}, size) = convert(T, rand(1:size)) generator{T<:Signed}(::Type{T}, size) = convert(T, rand(-size:size)) -generator{T<:FloatingPoint}(::Type{T}, size) = convert(T, (rand()-0.5).*size) +generator{T<:AbstractFloat}(::Type{T}, size) = convert(T, (rand()-0.5).*size) # This won't generate interesting UTF-8, but doing that is a Hard Problem generator{T<:String}(::Type{T}, size) = convert(T, randstring(size)) From d6003fece7e638944eb5cfebe935bb6e3429fb84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20F=20Schrauf?= Date: Tue, 27 Dec 2016 10:40:17 -0300 Subject: [PATCH 2/6] Update index.rst --- doc/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/index.rst b/doc/index.rst index a41c5d6..955df8f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -54,7 +54,7 @@ Methods Test the property ``prop``, with argument tpyes ``typs``, running ``ntests`` tests, and using the argument generators arggens. Each argument generator must be a function in a single positive integer which returns an item of the appropriate type which has "size" of the integer. This integer is used to scale the tests. This is a more efficient and flexible approach than conditional properties, but is sometimes harder to express:: - julia> quantproperty((x::Int, y::Int)->(x/y)>=floor(x/y), 100, (size)->QuickCheck.generator(Int,size), (size)->randbool() ? rand(1:size) : rand(-size:1)) + julia> quantproperty((x::Int, y::Int)->(x/y)>=floor(x/y), 100, (size)->QuickCheck.generator(Int,size), (size)->rand(Bool) ? rand(1:size) : rand(-size:1)) OK, passed 100 tests. ---------- From b4dd0a65556f550b99d7183a4e9f1b28728629e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20F=20Schrauf?= Date: Tue, 27 Dec 2016 13:47:11 -0300 Subject: [PATCH 3/6] corrected misspeling --- src/QuickCheck.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/QuickCheck.jl b/src/QuickCheck.jl index 6ec22a4..a6b799c 100644 --- a/src/QuickCheck.jl +++ b/src/QuickCheck.jl @@ -16,7 +16,7 @@ function lambda_arg_types(f::Function) # [eval(var.args[2]) for var in Base.uncompressed_ast(f.code).args[1]] c = methods(f).ms if length(c) != 1 - error("The function must have one, and only one mehtod.") + error("The function must have one, and only one method.") end [c[1].sig.parameters[2:end]...] end From 6346dabb82f3cf168c05ee451c4e72cc7233ee87 Mon Sep 17 00:00:00 2001 From: fHachenberg Date: Sat, 23 Feb 2019 00:01:50 +0100 Subject: [PATCH 4/6] parametric method syntax updated (-> using `where`) --- src/QuickCheck.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/QuickCheck.jl b/src/QuickCheck.jl index a6b799c..3926bef 100644 --- a/src/QuickCheck.jl +++ b/src/QuickCheck.jl @@ -66,22 +66,22 @@ function check_property(prop::Function, arggens, argconds, ntests, maxtests) end # Default generators for primitive types -generator{T<:Unsigned}(::Type{T}, size) = convert(T, rand(1:size)) -generator{T<:Signed}(::Type{T}, size) = convert(T, rand(-size:size)) -generator{T<:AbstractFloat}(::Type{T}, size) = convert(T, (rand()-0.5).*size) +generator(::Type{T}, size) using T<:Unsigned = convert(T, rand(1:size)) +generator(::Type{T}, size) using T<:Signed = convert(T, rand(-size:size)) +generator(::Type{T}, size) using T<:AbstractFloat = convert(T, (rand()-0.5).*size) # This won't generate interesting UTF-8, but doing that is a Hard Problem -generator{T<:String}(::Type{T}, size) = convert(T, randstring(size)) +generator(::Type{T}, size) using T<:String = convert(T, randstring(size)) generator(::Type{Any}, size) = error("Property variables cannot by typed Any.") # Generator for array types -function generator{T,n}(::Type{Array{T,n}}, size) +function generator(::Type{Array{T,n}}, size) using {T,n} dims = [rand(1:size) for i in 1:n] reshape([generator(T, size) for x in 1:prod(dims)], dims...) end # Generator for composite types -function generator{C}(::Type{C}, size) +function generator(::Type{C}, size) using C if C.types == () error("No generator defined for type $C.") end From 07332ca98cdea036f930887f7821b29825a2a286 Mon Sep 17 00:00:00 2001 From: fHachenberg Date: Sat, 23 Feb 2019 22:44:59 +0100 Subject: [PATCH 5/6] typed `using` instead of `where` for some reason... --- src/QuickCheck.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/QuickCheck.jl b/src/QuickCheck.jl index 3926bef..282767e 100644 --- a/src/QuickCheck.jl +++ b/src/QuickCheck.jl @@ -66,22 +66,22 @@ function check_property(prop::Function, arggens, argconds, ntests, maxtests) end # Default generators for primitive types -generator(::Type{T}, size) using T<:Unsigned = convert(T, rand(1:size)) -generator(::Type{T}, size) using T<:Signed = convert(T, rand(-size:size)) -generator(::Type{T}, size) using T<:AbstractFloat = convert(T, (rand()-0.5).*size) +generator(::Type{T}, size) where T <: Unsigned = convert(T, rand(1:size)) +generator(::Type{T}, size) where T <: Signed = convert(T, rand(-size:size)) +generator(::Type{T}, size) where T <: AbstractFloat = convert(T, (rand()-0.5).*size) # This won't generate interesting UTF-8, but doing that is a Hard Problem -generator(::Type{T}, size) using T<:String = convert(T, randstring(size)) +generator(::Type{T}, size) where T <: String = convert(T, randstring(size)) generator(::Type{Any}, size) = error("Property variables cannot by typed Any.") # Generator for array types -function generator(::Type{Array{T,n}}, size) using {T,n} +function generator(::Type{Array{T,n}}, size) where {T,n} dims = [rand(1:size) for i in 1:n] reshape([generator(T, size) for x in 1:prod(dims)], dims...) end # Generator for composite types -function generator(::Type{C}, size) using C +function generator(::Type{C}, size) where C if C.types == () error("No generator defined for type $C.") end From 5f57ee09b4e7b84772008561347c41453e9446ee Mon Sep 17 00:00:00 2001 From: fHachenberg Date: Sun, 24 Jan 2021 20:33:12 +0100 Subject: [PATCH 6/6] Added Projekt.toml --- Project.toml | 6 ++++++ REQUIRE | 0 2 files changed, 6 insertions(+) create mode 100644 Project.toml delete mode 100644 REQUIRE diff --git a/Project.toml b/Project.toml new file mode 100644 index 0000000..6c1e77b --- /dev/null +++ b/Project.toml @@ -0,0 +1,6 @@ +name = "QuickCheck" +uuid = "abda2286-424d-4629-8a5e-4a665049b11d" +version = "0.1.0" + +[compat] +julia = "≥ 0.7.0" diff --git a/REQUIRE b/REQUIRE deleted file mode 100644 index e69de29..0000000