tests/bind.R

library(flint)
flint:::.initBasic()

## Hack:
flintIdenticalRecursive <-
function (object, reference) {
    stopifnot(any(typeof(object) == c("list", "expression")))
    if (typeof(object) != typeof(reference) ||
        length(object) != length(reference) ||
        !identical(names(object), names(reference)))
        return(FALSE)
    for (i in seq_along(object))
        if (!(if (is(object[[i]], "flint") && is(reference[[i]], "flint"))
                  flintIdentical
              else identical)(object[[i]], reference[[i]]))
            return(FALSE)
    TRUE
}

L <- list(c("NULL"),
          c("raw"),
          c("ulong"),
          c("logical", "integer", "slong", "fmpz"),
          c("fmpq"),
          c("double", "mag", "arf"),
          c("arb"),
          c("complex", "acf", "acb"),
          c("character"),
          c("name", "pairlist", "list"),
          c("expression"))
l <- unlist(L)
p <- rep(cumsum(lengths(L)), times = lengths(L))
u <- lapply(l, as, object = 1L)

for (i in seq_along(u)) {
    class. <- l[[p[[i]]]]
    identical. <-
    switch(class.,
           "NULL" =, "raw" =, "character" = identical,
           "list" =, "expression" = flintIdenticalRecursive,
           flintIdentical)
    a <- do.call(c.flint, u[seq_len(i)], quote = TRUE)
    b <-
    switch(class.,
           "character" =, "list" =, "expression" = unlist(lapply(u[seq_len(i)], as, class.), recursive = FALSE),
           rep(u[[p[[i]]]], times = i - 1L))
    stopifnot(identical.(a, b))
}

Try the flint package in your browser

Any scripts or data that you put into this service are public.

flint documentation built on June 8, 2025, 1:27 p.m.