## waldo 0.4.0

• Atomic S3 classes with format methods now use those methods when displaying comparisons (#98). If the printed representation is the same, they fallback to displaying the underlying data.

• Rowwise data frame comparisons are now much much faster (#116), and respect the max_diffs argument (@krlmlr, #110).

• Unnamed environments now compare by value, not by reference (i.e. if two environments contain the same values, they compare the same, even if they’re different environments) (#127). Environments that contain self-references are handled correctly (#117). Differences between pairs of environments are only ever reported once.

• In the unlikely event that you have bare CHARSXP objects, waldo now handles them (#121).

• S4 objects are labelled with their class, not all superclasses (#125).

• compare_proxy() ignores the "index" attribute for data tables (@krlmlr, #107), and works again for RProtoBuf objects (@MichaelChirico, #119)

• Infinite values can be compared with a tolerance (@dmurdoch, #122).

## waldo 0.3.1

CRAN release: 2021-09-14

• compare()ing data frames now works independently of option(max.print) (#105).

• Fixed regression when comparing vectors with missing values (#102).

## waldo 0.3.0

CRAN release: 2021-08-23

• compare() is now considerably faster when comparing complex objects that don’t have any differences (thanks to strategic use of identical()) (#86).

• compare() gains two improvements to low-level diffs:

• Structurally identical data frames (#78) and numeric matrices (#76) gain a row-by-row diff that makes it easier to see where exactly values differ.

• An element-by-element diff will be automatically used if it’s shorter than the “smart” diff. This improves diff quality when comparing two vectors that aren’t really related (#68).

• compare() gains a list_as_map argument thanks to an idea from @dmurdoch. It allows you to compare the behaviour of two lists when they are used to connect names to values (i.e. the list is operating as a map or dictionary). It removes NULLs and sorts named components (#72).

• The objects involved in compare() (as opposed to the caller of compare()) gained much greater ability to control the comparison.

• Objects can now contain a waldo_opts attribute, a list with the same names and valid values as the arguments to compare(), which overrides the default comparisons (@dmurdoch).

• compare_proxy() is now called earlier (before type comparison) making it more flexible (#65).

• compare_proxy() gains a second argument, path, used to report how the proxy changed the object. This makes it easier to see when and how a proxy is used (#73).

• Proxies now exist for comparing RProtoBuf objects, converting them to proto text format (#82, @michaelquinn32).

• Comparing a list with symbol to a list without that element no longer errors (@mgirlich, #79).

## waldo 0.2.5

CRAN release: 2021-03-08

• On platforms without UTF-8 support, strings that differ only in their encoding are now correctly considered to be identical (#66).

## waldo 0.2.4

CRAN release: 2021-02-11

• Additional arguments to compare() generate a more informative warning (#58).

• Numbers use a better algorithm for picking the number of decimal places to
show (#63).

• ASTs with identical deparsed strings now show exactly how the AST differs. Source references are now more comprehensively stripped using rlang::zap_srcrefs()

• S3 objects now show the base type, and no longer fails when the types are incompatible.

## waldo 0.2.3

CRAN release: 2020-11-09

• compare() gains a new max_diffs argument that allows you to control the maximum number of differences shown. Set max_diffs = Inf to see all differences (#49)

• Logical vectors fall back to element-by-element comparison in more cases (#51).

• Long-form diff no longer confuses additions and deletions (#52, @krlmlr).

## waldo 0.2.2

CRAN release: 2020-10-15

• Handle S4 objects that have attributes that are not slots.

• Additions are now coloured blue and deletions yellow (instead of the opposite).

## waldo 0.2.1

CRAN release: 2020-10-08

• compare() now labels output as old and new, since that’s the most natural way to use it.

• compare() can selectively ignore attributes by providing vector to ignore_attr (#45).

• print() method gets n argument to allow explicitly specifying number of differences to show (@mnazarov).

• Improvements to comparison display:

• Zero length vectors compare robustly (#39)

• Line-by-line comparisons show modifications as deletion then addition, rather than addition then deletion (#44).

• Differences between numeric vectors are more robust, particularly in the presence of missing values (#43). The number of digits selected has also been slightly improved so that you’re more likely to get exactly the number of digits needed.

## waldo 0.2.0

CRAN release: 2020-07-13

• All objects: class (#26) and names (#31) are ignored when ignoring attributes.

• Numeric and logical vectors: clearer display of differences. Numbers are right-aligned, and we show the numbers not the differences.

• Character vectors: a trailing newline is no longer ignored (#37).

• Lists: all elements of the unnamed lists are compared, not just the last! (#32)

• Lists: unclassed prior to comparison (#21).

• Data frames: The internal representation of row names is no longer used; instead we use the same result of rownames() (#23).

• Environments: New ignore_formula_env and ignore_function_env arguments to ignore formula and function environments for compatibility with all.equal() (#24).

• Expression objects: can now be compared (#29).

• Calls: srcrefs and attributes are ignored.

• compare_proxy() is now exported so that you can provide methods if your objects need special handling (particularly needed for objects that contain external pointers) (#22).

• Fixed a partial argument name in as.list().

## waldo 0.1.0

CRAN release: 2020-04-16

• Added a NEWS.md file to track changes to the package.