Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test all the things! 🎉 #1

Open
jeaye opened this issue Oct 3, 2024 · 16 comments
Open

Test all the things! 🎉 #1

jeaye opened this issue Oct 3, 2024 · 16 comments

Comments

@jeaye
Copy link
Member

jeaye commented Oct 3, 2024

General process

Anyone is welcome to join in and write tests. The process goes like this:

  1. Pick a function from the list
  2. Leave a comment on this ticket to claim that function
  3. Create a new .cljc test file for that function
  4. Work through the testing questions, implementing tests for each
  5. Add any additional tests for all the edge cases you can think of
  6. Keep your tests dialect-independent (i.e. wrap any Java interop in a reader conditional and provide CLJS equivalents)
  7. Make a PR to add your new tests!

Testing questions

Common cases

  • What happens when the input is nil? (apply to all inputs)
  • What happens if it's given all valid inputs? (this will require some manual work to identify edge cases)
  • Are there any special cases for inputs?
  • What happens when the transducer arity is called?

Edge cases

  • What happens when the input is an incorrect shape (i.e. a number instead of a sequence)? (apply to all inputs)
  • If the input accepts a sequence, what happens when it's an infinite sequence?
  • If the input accepts a map, what happens with both array maps and hash maps?
  • If the input accepts a set, what happens with both sorted sets and hash sets?
  • If the function accepts unboxed inputs/outputs, what happens with different combinations?

Things we don't need to test

  • Invalid arity (too many/too few args, the runtime does this for us, not the fn itself)

Test progress

  • *
  • *'
  • *1
  • *2
  • *3
  • *agent*
  • *allow-unresolved-vars*
  • *assert*
  • *clojure-version*
  • *command-line-args*
  • *compile-files*
  • *compile-path*
  • *compiler-options*
  • *data-readers*
  • *default-data-reader-fn*
  • *e
  • *err*
  • *file*
  • *flush-on-newline*
  • *fn-loader*
  • *in*
  • *math-context*
  • *ns*
  • *out*
  • *print-dup*
  • *print-length*
  • *print-level*
  • *print-meta*
  • *print-namespace-maps*
  • *print-readably*
  • *read-eval*
  • *reader-resolver*
  • *source-path*
  • *suppress-read*
  • *unchecked-math*
  • *use-context-classloader*
  • *verbose-defrecords*
  • *warn-on-reflection*
  • +
  • +'
  • -
  • -'
  • ->
  • ->>
  • ->ArrayChunk
  • ->Eduction
  • ->Vec
  • ->VecNode
  • ->VecSeq
  • -cache-protocol-fn
  • -reset-methods
  • .
  • ..
  • /
  • <
  • <=
  • =
  • ==
  • >
  • >=
  • abs
  • accessor
  • aclone
  • add-classpath
  • add-tap
  • add-watch
  • agent
  • agent-error
  • agent-errors
  • aget
  • alength
  • alias
  • all-ns
  • alter
  • alter-meta!
  • alter-var-root
  • amap
  • ancestors
  • and
  • any?
  • apply
  • areduce
  • array-map
  • as->
  • aset
  • aset-boolean
  • aset-byte
  • aset-char
  • aset-double
  • aset-float
  • aset-int
  • aset-long
  • aset-short
  • assert
  • assoc
  • assoc!
  • assoc-in
  • associative?
  • atom
  • await
  • await-for
  • await1
  • bases
  • bean
  • bigdec
  • bigint
  • biginteger
  • binding
  • bit-and
  • bit-and-not
  • bit-clear
  • bit-flip
  • bit-not
  • bit-or
  • bit-set
  • bit-shift-left
  • bit-shift-right
  • bit-test
  • bit-xor
  • boolean
  • boolean-array
  • boolean?
  • booleans
  • bound-fn
  • bound-fn*
  • bound?
  • bounded-count
  • butlast
  • byte
  • byte-array
  • bytes
  • bytes?
  • case
  • cast
  • cat
  • catch
  • char
  • char-array
  • char-escape-string
  • char-name-string
  • char?
  • chars
  • chunk
  • chunk-append
  • chunk-buffer
  • chunk-cons
  • chunk-first
  • chunk-next
  • chunk-rest
  • chunked-seq?
  • class
  • class?
  • clear-agent-errors
  • clojure-version
  • coll?
  • comment
  • commute
  • comp
  • comparator
  • compare
  • compare-and-set!
  • compile
  • complement
  • completing
  • concat
  • cond
  • cond->
  • cond->>
  • condp
  • conj
  • conj!
  • cons
  • constantly
  • construct-proxy
  • contains?
  • count
  • counted?
  • create-ns
  • create-struct
  • cycle
  • dec
  • dec'
  • decimal?
  • declare
  • dedupe
  • def
  • default-data-readers
  • definline
  • definterface
  • defmacro
  • defmethod
  • defmulti
  • defn
  • defn-
  • defonce
  • defprotocol
  • defrecord
  • defstruct
  • deftype
  • delay
  • delay?
  • deliver
  • denominator
  • deref
  • derive
  • descendants
  • destructure
  • disj
  • disj!
  • dissoc
  • dissoc!
  • distinct
  • distinct?
  • do
  • doall
  • dorun
  • doseq
  • dosync
  • dotimes
  • doto
  • double
  • double-array
  • double?
  • doubles
  • drop
  • drop-last
  • drop-while
  • eduction
  • empty
  • EMPTY-NODE
  • empty?
  • ensure
  • ensure-reduced
  • enumeration-seq
  • error-handler
  • error-mode
  • eval
  • even?
  • every-pred
  • every?
  • ex-cause
  • ex-data
  • ex-info
  • ex-message
  • extend
  • extend-protocol
  • extend-type
  • extenders
  • extends?
  • false?
  • ffirst
  • file-seq
  • filter
  • filterv
  • finally
  • find
  • find-keyword
  • find-ns
  • find-protocol-impl
  • find-protocol-method
  • find-var
  • first
  • flatten
  • float
  • float-array
  • float?
  • floats
  • flush
  • fn
  • fn?
  • fnext
  • fnil
  • for
  • force
  • format
  • frequencies
  • future
  • future-call
  • future-cancel
  • future-cancelled?
  • future-done?
  • future?
  • gen-class
  • gen-interface
  • gensym
  • get
  • get-in
  • get-method
  • get-proxy-class
  • get-thread-bindings
  • get-validator
  • group-by
  • halt-when
  • hash
  • hash-combine
  • hash-map
  • hash-ordered-coll
  • hash-set
  • hash-unordered-coll
  • ident?
  • identical?
  • identity
  • if
  • if-let
  • if-not
  • if-some
  • ifn?
  • import
  • in-ns
  • inc
  • inc'
  • indexed?
  • infinite?
  • init-proxy
  • Inst
  • inst-ms
  • inst-ms*
  • inst?
  • instance?
  • int
  • int-array
  • int?
  • integer?
  • interleave
  • intern
  • interpose
  • into
  • into-array
  • ints
  • io!
  • isa?
  • iterate
  • iteration
  • iterator-seq
  • juxt
  • keep
  • keep-indexed
  • key
  • keys
  • keyword
  • keyword?
  • last
  • lazy-cat
  • lazy-seq
  • let
  • letfn
  • line-seq
  • list
  • list*
  • list?
  • load
  • load-file
  • load-reader
  • load-string
  • loaded-libs
  • locking
  • long
  • long-array
  • longs
  • loop
  • macroexpand
  • macroexpand-1
  • make-array
  • make-hierarchy
  • map
  • map-entry?
  • map-indexed
  • map?
  • mapcat
  • mapv
  • max
  • max-key
  • memfn
  • memoize
  • merge
  • merge-with
  • meta
  • method-sig
  • methods
  • min
  • min-key
  • mix-collection-hash
  • mod
  • monitor-enter
  • monitor-exit
  • munge
  • name
  • namespace
  • namespace-munge
  • NaN?
  • nat-int?
  • neg-int?
  • neg?
  • new
  • newline
  • next
  • nfirst
  • nil?
  • nnext
  • not
  • not-any?
  • not-empty
  • not-every?
  • not=
  • ns
  • ns-aliases
  • ns-imports
  • ns-interns
  • ns-map
  • ns-name
  • ns-publics
  • ns-refers
  • ns-resolve
  • ns-unalias
  • ns-unmap
  • nth
  • nthnext
  • nthrest
  • num
  • number?
  • numerator
  • object-array
  • odd?
  • or
  • parents
  • parse-boolean
  • parse-double
  • parse-long
  • parse-uuid
  • partial
  • partition
  • partition-all
  • partition-by
  • pcalls
  • peek
  • persistent!
  • pmap
  • pop
  • pop!
  • pop-thread-bindings
  • pos-int?
  • pos?
  • pr
  • pr-str
  • prefer-method
  • prefers
  • primitives-classnames
  • print
  • print-ctor
  • print-dup
  • print-method
  • print-simple
  • print-str
  • printf
  • println
  • println-str
  • PrintWriter-on
  • prn
  • prn-str
  • promise
  • proxy
  • proxy-call-with-super
  • proxy-mappings
  • proxy-name
  • proxy-super
  • push-thread-bindings
  • pvalues
  • qualified-ident?
  • qualified-keyword?
  • qualified-symbol?
  • quot
  • quote
  • rand
  • rand-int
  • rand-nth
  • random-sample
  • random-uuid
  • range
  • ratio?
  • rational?
  • rationalize
  • re-find
  • re-groups
  • re-matcher
  • re-matches
  • re-pattern
  • re-seq
  • read
  • read+string
  • read-line
  • read-string
  • reader-conditional
  • reader-conditional?
  • realized?
  • record?
  • recur
  • reduce
  • reduce-kv
  • reduced
  • reduced?
  • reductions
  • ref
  • ref-history-count
  • ref-max-history
  • ref-min-history
  • ref-set
  • refer
  • refer-clojure
  • reify
  • release-pending-sends
  • rem
  • remove
  • remove-all-methods
  • remove-method
  • remove-ns
  • remove-tap
  • remove-watch
  • repeat
  • repeatedly
  • replace
  • replicate
  • require
  • requiring-resolve
  • reset!
  • reset-meta!
  • reset-vals!
  • resolve
  • rest
  • restart-agent
  • resultset-seq
  • reverse
  • reversible?
  • rseq
  • rsubseq
  • run!
  • satisfies?
  • second
  • select-keys
  • send
  • send-off
  • send-via
  • seq
  • seq-to-map-for-destructuring
  • seq?
  • seqable?
  • seque
  • sequence
  • sequential?
  • set
  • set!
  • set-agent-send-executor!
  • set-agent-send-off-executor!
  • set-error-handler!
  • set-error-mode!
  • set-validator!
  • set?
  • short
  • short-array
  • shorts
  • shuffle
  • shutdown-agents
  • simple-ident?
  • simple-keyword?
  • simple-symbol?
  • slurp
  • some
  • some->
  • some->>
  • some-fn
  • some?
  • sort
  • sort-by
  • sorted-map
  • sorted-map-by
  • sorted-set
  • sorted-set-by
  • sorted?
  • special-symbol?
  • spit
  • split-at
  • split-with
  • StackTraceElement->vec
  • str
  • string?
  • struct
  • struct-map
  • subs
  • subseq
  • subvec
  • supers
  • swap!
  • swap-vals!
  • symbol
  • symbol?
  • sync
  • tagged-literal
  • tagged-literal?
  • take
  • take-last
  • take-nth
  • take-while
  • tap>
  • test
  • the-ns
  • thread-bound?
  • throw
  • Throwable->map
  • time
  • to-array
  • to-array-2d
  • trampoline
  • transduce
  • transient
  • tree-seq
  • true?
  • try
  • type
  • unchecked-add
  • unchecked-add-int
  • unchecked-byte
  • unchecked-char
  • unchecked-dec
  • unchecked-dec-int
  • unchecked-divide-int
  • unchecked-double
  • unchecked-float
  • unchecked-inc
  • unchecked-inc-int
  • unchecked-int
  • unchecked-long
  • unchecked-multiply
  • unchecked-multiply-int
  • unchecked-negate
  • unchecked-negate-int
  • unchecked-remainder-int
  • unchecked-short
  • unchecked-subtract
  • unchecked-subtract-int
  • underive
  • unquote
  • unquote-splicing
  • unreduced
  • unsigned-bit-shift-right
  • update
  • update-in
  • update-keys
  • update-proxy
  • update-vals
  • uri?
  • use
  • uuid?
  • val
  • vals
  • var
  • var-get
  • var-set
  • var?
  • vary-meta
  • vec
  • vector
  • vector-of
  • vector?
  • volatile!
  • volatile?
  • vreset!
  • vswap!
  • when
  • when-first
  • when-let
  • when-not
  • when-some
  • while
  • with-bindings
  • with-bindings*
  • with-in-str
  • with-loading-context
  • with-local-vars
  • with-meta
  • with-open
  • with-out-str
  • with-precision
  • with-redefs
  • with-redefs-fn
  • xml-seq
  • zero?
  • zipmap
@jeaye jeaye changed the title Test all the things 🎉 Test all the things! 🎉 Oct 3, 2024
@quoll
Copy link
Contributor

quoll commented Oct 19, 2024

Claiming * and *'

@quoll
Copy link
Contributor

quoll commented Oct 21, 2024

Claimed add-tap, remove-tap and tap>

Note: Included some short calls to Thread/sleep since taps respond asynchronously and code can race.

@NoahTheDuke
Copy link
Contributor

NoahTheDuke commented Oct 29, 2024

Claiming or: #8

@NoahTheDuke
Copy link
Contributor

NoahTheDuke commented Oct 30, 2024

Claiming some? and not: #11

@rob-3
Copy link
Contributor

rob-3 commented Nov 30, 2024

Claiming even?, odd?, and nil?

@rob-3
Copy link
Contributor

rob-3 commented Dec 1, 2024

Claiming inc and dec

@rob-3
Copy link
Contributor

rob-3 commented Dec 1, 2024

Claiming = (this might take a bit to finish)

@dgr
Copy link
Contributor

dgr commented Dec 9, 2024

Claiming:

  • identical?
  • zero?
  • pos?
  • neg?
  • number?
  • ratio?
  • rational?
  • integer?
  • int?
  • pos-int?
  • nat-int?
  • decimal?
  • float?
  • double?
  • true?
  • false?
  • boolean

These are all fairly easy to do as a group since the tests are similar.

@dgr
Copy link
Contributor

dgr commented Dec 9, 2024

Claiming:

  • keyword
  • symbol
  • name
  • intern
  • namespace
  • keyword?
  • symbol?
  • ident?
  • simple-keyword?
  • simple-symbol?
  • simple-ident?
  • qualified-keyword?
  • qualified-symbol?
  • qualified-ident?

@dgr
Copy link
Contributor

dgr commented Dec 10, 2024

Claiming:

  • char
  • char?
  • format
  • pr-str
  • print-str
  • println-str
  • prn-str
  • str
  • string?
  • subs
  • with-out-str

@dgr
Copy link
Contributor

dgr commented Dec 11, 2024

Claiming:

  • byte
  • short
  • int
  • long
  • float
  • double
  • bigint
  • bigdec
  • num
  • rationalize

@dgr
Copy link
Contributor

dgr commented Dec 20, 2024

Claiming:

  • -
  • /
  • quot
  • rem
  • mod
  • inc
  • dec
  • max
  • min
  • with-precision
  • numerator
  • denominator
  • rand
  • rand-int

@jake-jake-jake
Copy link
Contributor

Claiming

  • compare

@angusiguess
Copy link
Contributor

Claiming

@jake-jake-jake
Copy link
Contributor

Claiming fnil: #29

@jake-jake-jake
Copy link
Contributor

Claiming partial: #30

@jeaye jeaye removed the help wanted label Jan 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants