dragosmg commented on a change in pull request #12433:
URL: https://github.com/apache/arrow/pull/12433#discussion_r817576084



##########
File path: r/tests/testthat/test-dplyr-funcs-type.R
##########
@@ -768,3 +769,138 @@ test_that("nested structs can be created from scalars and 
existing data frames",
     tibble(a = 1:2)
   )
 })
+
+test_that("as.Date() converts successfully from date, timestamp, integer, char 
and double", {
+  test_df <- tibble::tibble(
+    posixct_var = as.POSIXct("2022-02-25 00:00:01", tz = "Europe/London"),
+    date_var = as.Date("2022-02-25"),
+    character_ymd_var = "2022-02-25 00:00:01",
+    character_ydm_var = "2022/25/02 00:00:01",
+    integer_var = 32L,
+    double_var = 34.56
+  )
+
+  # casting from POSIXct treated separately so we can skip on Windows
+  # TODO move the test for casting from POSIXct below once ARROW-13168 is done
+  compare_dplyr_binding(
+    .input %>%
+      mutate(
+        date_dv = as.Date(date_var),
+        date_char_ymd = as.Date(character_ymd_var, format = "%Y-%m-%d 
%H:%M:%S"),
+        date_char_ydm = as.Date(character_ydm_var, format = "%Y/%d/%m 
%H:%M:%S"),
+        date_int = as.Date(integer_var, origin = "1970-01-01")
+      ) %>%
+      collect(),
+    test_df
+  )
+
+  # the way we go about it is a bit different, but the result is the same =>
+  # testing without compare_dplyr_binding()
+  expect_equal(
+    test_df %>%
+      arrow_table() %>%
+      mutate(date_double = as.Date(double_var)) %>%
+      collect(),
+    test_df %>%
+      arrow_table() %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")) %>%
+      collect()
+  )
+
+  expect_equal(
+    test_df %>%
+      record_batch() %>%
+      mutate(date_double = as.Date(double_var)) %>%
+      collect(),
+    test_df %>%
+      arrow_table() %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")) %>%
+      collect()
+  )
+
+  # actual and expected differ due to doubles are accounted for (floored in
+  # arrow and rounded to the next decimal in R)
+  expect_error(
+    compare_dplyr_binding(
+      .input %>%
+        mutate(date_double = as.Date(double_var, origin = "1970-01-01")) %>%
+        collect(),
+      test_df
+    )
+  )
+
+  expect_equal(
+    test_df %>%
+      arrow_table() %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")) %>%
+      collect(),
+    test_df %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")),
+    # the absolute value for date_double is different due to arrow casting from
+    # integer and r from double => testing with a tolerance of 0.6
+    # `actual$date_double`: 34.0
+    # `expected$date_double`: 34.6
+    tolerance = 0.6
+  )
+
+  expect_equal(
+    test_df %>%
+      record_batch() %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")) %>%
+      collect(),
+    test_df %>%
+      mutate(date_double = as.Date(double_var, origin = "1970-01-01")),
+    # the absolute value for date_double is different due to arrow casting from
+    # integer and r from double => testing with a tolerance of 0.6
+    # `actual$date_double`: 34.0
+    # `expected$date_double`: 34.6
+    tolerance = 0.6
+  )
+
+  # currently we do not support an origin different to "1970-01-01"
+  expect_warning(
+    test_df %>%
+      arrow_table() %>%
+      mutate(date_int = as.Date(integer_var, origin = "1970-01-03")) %>%
+      collect(),
+    regexp = "`as.Date()` with an `origin` different than '1970-01-01' is not 
supported in Arrow",
+    fixed = TRUE
+

Review comment:
       Done




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to