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)Objects to compare
Additional arguments used to control specifics of comparison
Maximum number of differences to show
If TRUE, also checks values of attributes.
Maximum number of lines to show from each difference
Width of output device
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.
# 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.35)
#> [2] 0.738 - 5 == -4.26
#> [16] 0.227 - 5 == -4.77
#> [19] 0.905 - 5 == -4.10
#> [21] 0.131 - 5 == -4.87
#> [22] 0.944 - 5 == -4.06
#> [23] 0.907 - 5 == -4.09
#> [56] 0.962 - 5 == -4.04
#> [70] 0.516 - 5 == -4.48
#> [73] 0.280 - 5 == -4.72
#> ...
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