File: test-callable-dynamic-dots.R

package info (click to toggle)
r-cran-reticulate 1.41.0.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,088 kB
  • sloc: cpp: 5,154; python: 620; sh: 13; makefile: 2
file content (24 lines) | stat: -rw-r--r-- 1,032 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
context("dynamic-dots")

test_that("callables support dynamic-dots", {

  fn <- py_eval("lambda *args, **kwargs: (args if args else None, kwargs if kwargs else None)")

  # splicing (unpacking) arguments works correctly
  args <- list(1, 2, 3)
  kwargs <- list(a = 4, b = 5, c = 6)
  expect_identical(fn(!!!args), fn(1, 2, 3))
  expect_identical(fn(!!!kwargs), fn(a = 4, b = 5, c = 6))
  expect_identical(fn(!!!c(args, kwargs)), fn(1, 2, 3, a = 4, b = 5, c = 6))
  expect_identical(fn(!!!c(args, kwargs), x = 7), fn(1, 2, 3, a = 4, b = 5, c = 6, x = 7))
  expect_identical(fn(8, !!!c(args, kwargs), x = 7), fn(8, 1, 2, 3, a = 4, b = 5, c = 6, x = 7))
  expect_identical(fn(8, !!!c(args, kwargs), x = 7), list(list(8, 1, 2, 3), list(a = 4, b = 5, c = 6, x = 7)))

  # injecting names works correctly
  nm <- "key"
  expect_identical(fn("{nm}" := 42),     list(NULL, list(key = 42)))
  expect_identical(fn("abc_{nm}" := 42), list(NULL, list(abc_key = 42)))

  # trailing commas are ignored
  expect_identical(fn(1, 2, ), fn(1, 2))
})