[Superseded]

compare is similar to base::all.equal(), but somewhat buggy in its use of tolerance. Please use waldo instead.

compare(x, y, ...)

# S3 method for default
compare(x, y, ..., max_diffs = 9)

# S3 method for character
compare(
  x,
  y,
  check.attributes = TRUE,
  ...,
  max_diffs = 5,
  max_lines = 5,
  width = cli::console_width()
)

# S3 method for numeric
compare(
  x,
  y,
  tolerance = testthat_tolerance(),
  check.attributes = TRUE,
  ...,
  max_diffs = 9
)

testthat_tolerance()

# S3 method for POSIXt
compare(x, y, tolerance = 0.001, ..., max_diffs = 9)

Arguments

x, y

Objects to compare

...

Additional arguments used to control specifics of comparison

max_diffs

Maximum number of differences to show

check.attributes

If TRUE, also checks values of attributes.

max_lines

Maximum number of lines to show from each difference

width

Width of output device

tolerance

Numerical tolerance: any differences (in the sense of base::all.equal()) smaller than this value will be ignored.

The default tolerance is sqrt(.Machine$double.eps), unless long doubles are not available, in which case the test is skipped.

Examples

# Character -----------------------------------------------------------------
x <- c("abc", "def", "jih")
compare(x, x)
#> Equal

y <- paste0(x, "y")
compare(x, y)
#> 3/3 mismatches
#> x[1]: "abc"
#> y[1]: "abcy"
#> 
#> x[2]: "def"
#> y[2]: "defy"
#> 
#> x[3]: "jih"
#> y[3]: "jihy"

compare(letters, paste0(letters, "-"))
#> 26/26 mismatches
#> x[1]: "a"
#> y[1]: "a-"
#> 
#> x[2]: "b"
#> y[2]: "b-"
#> 
#> x[3]: "c"
#> y[3]: "c-"
#> 
#> x[4]: "d"
#> y[4]: "d-"
#> 
#> x[5]: "e"
#> y[5]: "e-"

x <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus
 tincidunt auctor. Vestibulum ac metus bibendum, facilisis nisi non, pulvinar
 dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
y <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus
 tincidunt auctor. Vestibulum ac metus1 bibendum, facilisis nisi non, pulvinar
 dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
compare(x, y)
#> 1/1 mismatches
#> x[1]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> x[1]: ncidunt auctor. Vestibulum ac metus bibendum, facilisis nisi non, pulvinar
#> x[1]: \n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
#> y[1]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> y[1]: ncidunt auctor. Vestibulum ac metus1 bibendum, facilisis nisi non, pulvina
#> y[1]: r\n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
compare(c(x, x), c(y, y))
#> 2/2 mismatches
#> x[1]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> x[1]: ncidunt auctor. Vestibulum ac metus bibendum, facilisis nisi non, pulvinar
#> x[1]: \n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
#> y[1]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> y[1]: ncidunt auctor. Vestibulum ac metus1 bibendum, facilisis nisi non, pulvina
#> y[1]: r\n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
#> 
#> x[2]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> x[2]: ncidunt auctor. Vestibulum ac metus bibendum, facilisis nisi non, pulvinar
#> x[2]: \n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "
#> y[2]: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis cursus\n ti
#> y[2]: ncidunt auctor. Vestibulum ac metus1 bibendum, facilisis nisi non, pulvina
#> y[2]: r\n dolor. Donec pretium iaculis nulla, ut interdum sapien ultricies a. "

# Numeric -------------------------------------------------------------------

x <- y <- runif(100)
y[sample(100, 10)] <- 5
compare(x, y)
#> 10/100 mismatches (average diff: 4.43)
#> [5]  0.167 - 5 == -4.83
#> [12] 0.847 - 5 == -4.15
#> [20] 0.517 - 5 == -4.48
#> [27] 0.890 - 5 == -4.11
#> [28] 0.568 - 5 == -4.43
#> [56] 0.280 - 5 == -4.72
#> [64] 0.696 - 5 == -4.30
#> [72] 0.879 - 5 == -4.12
#> [75] 0.784 - 5 == -4.22
#> ...

x <- y <- 1:10
x[5] <- NA
x[6] <- 6.5
compare(x, y)
#> 2/10 mismatches (average diff: 0.5)
#> [5]  NA - 5 ==  NA
#> [6] 6.5 - 6 == 0.5

# Compare ignores minor numeric differences in the same way
# as all.equal.
compare(x, x + 1e-9)
#> Equal