

test_that("Encoding Complex", {
  expect_equal(toJSON(complex(real=2, imaginary=2)), "[\"2+2i\"]");
  expect_equal(toJSON(complex(real=NA, imaginary=2)), "[\"NA\"]");
  expect_equal(toJSON(complex(real=1, imaginary=NA)), "[\"NA\"]");
  expect_equal(toJSON(complex(real=NA, imaginary=2), na="null"), "[null]");
});

test_that("Encoding Complex in Data Frame", {
  expect_equal(toJSON(data.frame(foo=complex(real=1, imaginary=2))), "[{\"foo\":\"1+2i\"}]");
  expect_equal(toJSON(data.frame(foo=complex(real=NA, imaginary=2))), "[{}]");
  expect_equal(toJSON(data.frame(foo=complex(real=NA, imaginary=2)), na="string"), "[{\"foo\":\"NA\"}]");
  expect_equal(toJSON(data.frame(foo=complex(real=NA, imaginary=2)), na="null"), "[{\"foo\":null}]");
});

test_that("Encoding Complex as list", {
  x <- complex(real=c(1,2,NA), imaginary=3:1);
  expect_equal(toJSON(x), "[\"1+3i\",\"2+2i\",\"NA\"]");
  expect_equal(toJSON(x, complex="list"), "{\"real\":[1,2,\"NA\"],\"imaginary\":[3,2,1]}");
  expect_equal(toJSON(data.frame(foo=x), complex="list"), "[{\"foo\":{\"real\":1,\"imaginary\":3}},{\"foo\":{\"real\":2,\"imaginary\":2}},{\"foo\":{\"imaginary\":1}}]");
  expect_equal(toJSON(data.frame(foo=x), complex="list", na="string"), "[{\"foo\":{\"real\":1,\"imaginary\":3}},{\"foo\":{\"real\":2,\"imaginary\":2}},{\"foo\":{\"real\":\"NA\",\"imaginary\":1}}]");
  expect_equal(toJSON(data.frame(foo=x), complex="list", dataframe="columns"), "{\"foo\":{\"real\":[1,2,\"NA\"],\"imaginary\":[3,2,1]}}");
});
