

# Note about numeric precision
# In the unit tests we use digits=10. Lowever values will result in problems for some datasets
test_that("fromJSON Matrix", {
  objects <- list(
    matrix(1),
    matrix(1:2),
    matrix(1:2, nrow=1),
    matrix(round(pi,2)),
    matrix(c(1,NA,2,NA), 2),
    volcano,
    matrix(NA)
  );

  lapply(objects, function(object){
    newobject <- fromJSON(toJSON(object));
    expect_true(inherits(newobject, "matrix"));
    expect_equal(object, newobject);
  });

  expect_equal(fromJSON(toJSON(objects)), objects);
});

test_that("fromJSON Matrix with simplifyMatrix=FALSE", {
  expect_equal(fromJSON(toJSON(matrix(1)), simplifyMatrix=FALSE), list(1));
  expect_equal(fromJSON(toJSON(matrix(1)), simplifyVector=FALSE), list(list((1))));
  expect_equal(fromJSON(toJSON(matrix(NA)), simplifyMatrix=FALSE), list(NA));
  expect_equal(fromJSON(toJSON(matrix(NA)), simplifyVector=FALSE), list(list((NULL))));
});


test_that("fromJSON Matrix datasets", {
  objects <- Filter(is.matrix, lapply(ls("package:datasets"), get));

  lapply(objects, function(object){
    class(object) <- "matrix";
    newobject <- fromJSON(toJSON(object, digits=4))
    expect_true(inherits(newobject, "matrix"));
    expect_equal(dim(newobject), dim(object));
    attributes(newobject) <- attributes(object);

    # R has changed rounding algo in 4.0 and no longer matches printf
    #expect_equal(newobject, round(object,4));
    expect_equal(newobject, object, tolerance = 1e-4)
  });
});
