test_that("`str_extract_currencies()` works", {
  string <- "35.00 $1.14 abc5 $3.8 77"
  expect_equal(
    str_extract_currencies(string),
    data.frame(
      string_num = 1, string = string,
      curr_sym = c("", "$", "c", "$", " "),
      amount = c(35, 1.14, 5, 3.8, 77),
      stringsAsFactors = FALSE
    )
  )
  string <- c(
    "35.00 $1.14", "abc5 $3.8 77", "-$1.5e6",
    "over £1,000"
  )
  reps <- c(2, 3, 1, 1)
  expect_equal(
    str_extract_currencies(string),
    data.frame(
      string_num = rep(seq_along(string), reps),
      string = rep(string, reps),
      curr_sym = c("", "$", "c", "$", " ", "$", "£"),
      amount = c(35, 1.14, 5, 3.8, 77, -1.5e6, 1000),
      stringsAsFactors = FALSE
    )
  )
  expect_equal(
    as.data.frame(str_extract_currencies(character())),
    data.frame(
      string_num = integer(), string = character(),
      curr_sym = character(), amount = numeric(),
      stringsAsFactors = FALSE
    )
  )
})
test_that("`str_nth_currency()` works", {
  string <- c("ab3 13", "$1")
  expect_equal(
    str_nth_currency(string, n = 2),
    data.frame(
      string_num = seq_along(string), string = string,
      curr_sym = c(" ", NA), amount = c(13, NA),
      stringsAsFactors = FALSE
    )
  )
  string <- c("35.00 $1.14", "abc5 $3.8", "stuff")
  expect_equal(str_nth_currency(string, c(
    1,
    2, 1
  )), data.frame(
    string_num = seq_along(string), string = string,
    curr_sym = c("", "$", NA), amount = c(35, 3.8, NA),
    stringsAsFactors = FALSE
  ))
  string <- c("ab3 13", "$1", "35.00 $1.14", "abc5 $3.8", "stuff")
  expect_equal(
    str_nth_currency(string, n = 2),
    data.frame(
      string_num = 1:5,
      string = c("ab3 13", "$1", "35.00 $1.14", "abc5 $3.8", "stuff"),
      curr_sym = c(" ", NA, "$", "$", NA),
      amount = c(13, NA, 1.14, 3.8, NA),
      stringsAsFactors = FALSE
    )
  )
  expect_equal(
    str_nth_currency(string, c(1, 2, 1, 2, 1)),
    data.frame(
      string_num = 1:5,
      string = c("ab3 13", "$1", "35.00 $1.14", "abc5 $3.8", "stuff"),
      curr_sym = c("b", NA, "", "$", NA),
      amount = c(3, NA, 35, 3.8, NA),
      stringsAsFactors = FALSE
    )
  )
  expect_equal(
    str_first_currency(string),
    data.frame(
      string_num = 1:5,
      string = c(
        "ab3 13", "$1", "35.00 $1.14",
        "abc5 $3.8", "stuff"
      ),
      curr_sym = c("b", "$", "", "c", NA),
      amount = c(
        3,
        1, 35, 5, NA
      ), stringsAsFactors = FALSE
    )
  )
  expect_equal(
    str_last_currency(string),
    data.frame(
      string_num = 1:5, string = c(
        "ab3 13", "$1", "35.00 $1.14",
        "abc5 $3.8", "stuff"
      ), curr_sym = c(" ", "$", "$", "$", NA),
      amount = c(13, 1, 1.14, 3.8, NA),
      stringsAsFactors = FALSE
    )
  )
  expect_snapshot_error(str_nth_currency(as.character(1:3), 1:7))
  expect_equal(as.data.frame(str_nth_currency(string, n = -2)),
    data.frame(
      string_num = seq_along(string), string,
      curr_sym = c("b", NA, "", "c", NA),
      amount = c(3, NA, 35, 5, NA),
      stringsAsFactors = FALSE
    ),
    ignore_attr = TRUE
  )
  expect_equal(
    as.data.frame(str_nth_currency(string, c(1, -2, 1, 2, -1))),
    data.frame(
      string_num = seq_along(string), string,
      curr_sym = c("b", NA, "", "$", NA),
      amount = c(3, NA, 35, 3.8, NA),
      stringsAsFactors = FALSE
    )
  )
  expect_equal(
    as.data.frame(str_nth_currency(character(), 1)),
    data.frame(
      string_num = integer(), string = character(),
      curr_sym = character(), amount = numeric(),
      stringsAsFactors = FALSE
    )
  )
})
