vetr:::attr_compare(structure(list(), class = letters[2:4]), 
    structure(list("hello"), class = letters[1:4]), attr.mode = 1)

$success
[1] 0

$message
$message$message
[1] "be" "3"  "is" "4" 

$message$wrap
$message$wrap[[1]]
length(class(NULL))

$message$wrap[[2]]
$message$wrap[[2]][[1]]
NULL




$df
[1] 0

$lvl
[1] 6

vetr:::attr_compare(structure(list(integer(), character())), 
    data.frame(a = 1:10, b = letters[1:10]), attr.mode = 2)

$success
[1] 0

$message
$message$message
[1] "not have"            "attribute \"class\"" ""                   
[4] ""                   

$message$wrap
$message$wrap[[1]]
NULL

$message$wrap[[2]]
NULL



$df
[1] 0

$lvl
[1] 6

vetr:::attr_compare(structure(list(integer(), character()), class = "data.frame"), 
    data.frame(a = 1:10, b = letters[1:10]), attr.mode = 2)

$success
[1] 0

$message
$message$message
[1] "not have"            "attribute \"names\"" ""                   
[4] ""                   

$message$wrap
$message$wrap[[1]]
NULL

$message$wrap[[2]]
NULL



$df
[1] 0

$lvl
[1] 7

vetr:::attr_compare(structure(list(), welp = list(NULL, 1:3), 
    belp = 1:3), structure(list("hello"), welp = list(NULL, 1:3)), 
    attr.mode = 2)

vetr:::attr_compare(structure(list(), welp = list(NULL, 1:3), 
    belp = 1:3), structure(list("hello"), welp = list(NULL, 1:3), 
    kelp = 20), attr.mode = 2)

# TRUE, methods should always match generics

# FALSE, but generics won't match methods with more arguments

[1] "have"                                  
[2] "argument `digits` after argument `...`"
[3] ""                                      
[4] ""

have
argument `correlation` after argument `object`

[1] "have"                                          
[2] "argument `correlation` after argument `object`"
[3] ""                                              
[4] ""

fn9 <- function(x, a, ..., g, y, w) NULL

[1] "not have"                        "argument `z` after argument `y`"
[3] ""                                ""

[1] "have"                            "argument `z` after argument `y`"
[3] ""                                ""