stathissideris / spec-provider

Infer Clojure specs from sample data. Inspired by F#'s type providers.
519 stars 22 forks source link

` #'spec-provider.stats/empty-stats did not conform to spec.` #34

Open rgkirch opened 2 years ago

rgkirch commented 2 years ago

#'spec-provider.stats/empty-stats did not conform to spec.

similar to https://github.com/stathissideris/spec-provider/issues/28 but it looks to me like changes were merged to fix this

project.clj

(defproject broken "0.0.1"
  :dependencies [[orchestra "2021.01.01-1"]
                 [org.clojure/clojure "1.10.0"]
                 [spec-provider "0.4.14"]]
  :source-paths ["src"]
  :main example)

src/example.cljc

(ns example
  (:require [spec-provider.stats :as stats]
            [orchestra.spec.test :as stest]))

(stest/instrument)

(defn -main
  []
  (println (stats/collect ["hi"])))
Exception in thread "main" Syntax error compiling at (C:\Users\richie\AppData\Local\Temp\form-init1921782138713344766.clj:1:109).
Call to #'spec-provider.stats/empty-stats did not conform to spec.
        at clojure.lang.Compiler.load(Compiler.java:7647)
        at clojure.lang.Compiler.loadFile(Compiler.java:7573)
        at clojure.main$load_script.invokeStatic(main.clj:452)
        at clojure.main$init_opt.invokeStatic(main.clj:454)
        at clojure.main$init_opt.invoke(main.clj:454)
        at clojure.main$initialize.invokeStatic(main.clj:485)
        at clojure.main$null_opt.invokeStatic(main.clj:519)
        at clojure.main$null_opt.invoke(main.clj:516)
        at clojure.main$main.invokeStatic(main.clj:598)
        at clojure.main$main.doInvoke(main.clj:561)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.main.main(main.java:37)
Caused by: clojure.lang.ExceptionInfo: Call to #'spec-provider.stats/empty-stats did not conform to spec. {:clojure.spec.alpha/problems ({:path [:spec-provider.stats/distinct-values], :pred (clojure.core/fn [%] (clojure.core/or (clojure.core/nil? %) (clojure.core/sequential? %))), :val #{}, :via [:spec-provider.stats/stats :spec-provider.stats/distinct-values], :in [:spec-provider.stats/distinct-values]}), :clojure.spec.alpha/spec #object[clojure.spec.alpha$map_spec_impl$reify__1997 0x7ce4de34 "clojure.spec.alpha$map_spec_impl$reify__1997@7ce4de34"], :clojure.spec.alpha/value {:spec-provider.stats/distinct-values #{}, :spec-provider.stats/sample-count 0, :spec-provider.stats/pred-map {}}, :clojure.spec.alpha/fn spec-provider.stats/empty-stats, :clojure.spec.alpha/ret {:spec-provider.stats/distinct-values #{}, :spec-provider.stats/sample-count 0, :spec-provider.stats/pred-map {}}, :clojure.spec.alpha/failure :instrument, :orchestra.spec.test/caller {:file "stats.cljc", :line 199, :var-scope spec-provider.stats/update-stats}}
        at orchestra.spec.test$spec_checking_fn$conform_BANG___297.invoke(test.cljc:30)
        at orchestra.spec.test$spec_checking_fn$fn__300.doInvoke(test.cljc:39)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at spec_provider.stats$update_stats.invokeStatic(stats.cljc:199)
        at spec_provider.stats$update_stats.invoke(stats.cljc:193)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at orchestra.spec.test$spec_checking_fn$fn__300.doInvoke(test.cljc:37)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at spec_provider.stats$collect$fn__280.invoke(stats.cljc:223)
        at clojure.lang.PersistentVector.reduce(PersistentVector.java:343)
        at clojure.core$reduce.invokeStatic(core.clj:6827)
        at clojure.core$reduce.invoke(core.clj:6810)
        at spec_provider.stats$collect.invokeStatic(stats.cljc:223)
        at spec_provider.stats$collect.invoke(stats.cljc:219)
        at spec_provider.stats$collect.invokeStatic(stats.cljc:221)
        at spec_provider.stats$collect.invoke(stats.cljc:219)
        at example$_main.invokeStatic(example.cljc:9)
        at example$_main.invoke(example.cljc:7)
        at clojure.lang.Var.invoke(Var.java:380)
        at user$eval140.invokeStatic(form-init1921782138713344766.clj:1)
        at user$eval140.invoke(form-init1921782138713344766.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:7176)
        at clojure.lang.Compiler.eval(Compiler.java:7166)
        at clojure.lang.Compiler.load(Compiler.java:7635)
        ... 12 more

there's no issue if I use [org.clojure/clojure "1.9.0"]

$ lein run
#:spec-provider.stats{:distinct-values #{hi}, :sample-count 1, :pred-map {#object[clojure.core$string_QMARK___5132 0x6b85300e clojure.core$string_QMARK___5132@6b85300e] #:spec-provider.stats{:sample-count 1, :min-length 2, :max-length 2}}}