# assertr development version



# assertr 3.1

* inside `verify()`, `.` now stands for the data under any pipe, so
  `nrow(.)` works with `|>`

* the README now shows how to write a custom predicate (#62)

* `assert()` now applies a custom predicate to every element; on a
   single column it could pass without checking them

* a predicate that returns a zero-length value is now an error

* an `NA` returned by a predicate now counts as a violation

* `in_set(inverse = TRUE)` now respects `allow.na` (#133)

* `assert_rows()` and `insist_rows()` reports now give one column
  label per assertion (#83)

* long predicate calls and `verify()` expressions are reported as one
  string (#88)

* `chain_end()` no longer leaves chain state on the data (#115)

* assertions now warn when the column selection matches no columns
(#113)

* the "requires columns to be selected" errors now say what to do,
  instead

* `verify()` no longer warns about a zero-length result on data
  frames with no rows

* `col_concat()` no longer rounds or pads numbers next to non-numeric
  columns

* BREAKING: the default separator of `col_concat()` is now ", "

* `duplicates_across_cols()` no longer reports false duplicates in
  mixed data frames, or errors on one row or no rows

* `num_row_NAs()` no longer counts `NaN` as `NA` in mixed data frames

* `insist()` on a single row now reports which columns failed

* `insist()`, `assert_rows()` and `insist_rows()` now pass on data
  frames with no rows

* `error_report()` and `warn_report()` count an assertion on several
  columns as one verb

* `warning_append()` now marks every error it attaches

* a failing assertion no longer changes the state of R's random
  number generator

* `has_only_names()` no longer passes when a name is given twice and
  a column is left out

* `has_all_names()` and `has_class()` now accept character vectors of
  names

* `has_class()` now works on columns with more than one class

* `within_bounds()` now works with date-time and ordered-factor bounds

* `within_n_sds()` and `within_n_mads()` now accept numeric vectors
  with attributes, such as labels

* `assert()` no longer errors on data frames with 0 rows (the
  underlying cause of #95)

* Assert errors now print the description in the error summary (PR #132)

* Added the ability to check non-numeric classes with `within_bounds()`
  (fix #89)

# assertr 3.0

* Finally removed deprecated underscore functions

* Fixed a bug wherein single row data.frames were not handled properly

# assertr 2.9

* New function `has_only_names` requires that a data.frame or list
  have only the names requested.

* more graceful handling non-vectorized predicates

* some documentation/vignette updates

# assertr 2.8

* allows for custom success/error callbacks
  even if in an assertr chain

* ability to store success information

* introduction of obligatory rules, which
  marks data as defective and can use
  a custom callback

* support for a custom description of a rule

* support for appending warnings

* support for checking if a row contains a
  duplicated value across columns
  (`duplicates_across_cols` [a row_redux])

* support for checking if passed data has a
  particular class (`has_class` [a verify utility])

* support for assertion IDs

# assertr 2.7

* `assert()`: remove dead code (closes #103)

# assertr 2.6

* bugs due to changes in rlang 0.3.0 fixed.

# assertr 2.5

* `is_uniq` predicate now accepts multiple vectors and evaluates
  uniqueness on the combination of them.

* Breaking change: the `allow.na` argument to `is_uniq` must be named.
  Code like `is_uniq(x, TRUE)` will no longer work.
  Instead write `is_uniq(x, allow.na = TRUE)`.

# assertr 2.4

* errors from all assertr verbs now contain a data.frame holding the
  verb used, row reduction function (if any), the predicate, the column
  (or select formula), index, and offending value for each error

* the `error_report` (and new `error_df_return`) will bind the rows of
  all error data.frames in a list of errors. This is useful for assertr
  chains that contain multiple different verbs and allows all the errors
  to be viewed at a glance and, if so desired, computed upon

* switched to using the tidyeval framework and deprecated underscore functions

* bug fixes and performance enhancements

# assertr 2.0.0

* redesigned error and error handling mechanism

* assertr errors are now an S3 class and have some methods defined for them

* created some useful 'success' and 'error' functions

* added `chain_start` and `chain_end` that directs assertr to check all
  assertions (powering through failed ones instead of halting) and
  accumulating all the errors

* added 'is_uniq' predicate

* added 'has_all_names' utility function

* added 'col_concat' row reduction function

# assertr 1.0.0

* added row reduction functions like mahalanobis distnace

* added assert_rows and insist_rows assert verbs

* bug fixes

# assertr 0.5.7

* added within_n_mads predicate generator

# assertr 0.5.5

* added support for parameterized error functions

# assertr 0.5

* improved performance by adding support for vectorized predicates
* counts number of violations instead of short circuiting

# assertr 0.4.9

* provided standard evaluation versions of assert and insist

# assertr 0.4.2

* not_na and within_bounds are now vectorized and tagged

# assertr 0.4.1

* fixed automated tests to success with R 3.0.3

# assertr 0.4

* added `insist` and `within_n_sds` functions and updated vignette
  and documentations

# assertr 0.2

* initial release
