|
27 | 27 | #include <gtest/gtest.h> |
28 | 28 |
|
29 | 29 | #include "iceberg/expression/literal.h" |
30 | | -#include "iceberg/transform_function.h" |
31 | 30 | #include "iceberg/type.h" |
32 | 31 | #include "iceberg/util/formatter.h" // IWYU pragma: keep |
33 | 32 | #include "matchers.h" |
| 33 | +#include "temporal_test_helper.h" |
34 | 34 |
|
35 | 35 | namespace iceberg { |
36 | 36 |
|
@@ -315,25 +315,40 @@ INSTANTIATE_TEST_SUITE_P( |
315 | 315 | .source = Literal::Decimal(1420, 4, 2), |
316 | 316 | .expected = Literal::Int(3)}, |
317 | 317 | TransformParam{.str = "Date", |
318 | | - // 2017-11-16 |
319 | 318 | .source_type = iceberg::date(), |
320 | | - .source = Literal::Date(17486), |
| 319 | + .source = Literal::Date(TemporalTestHelper::CreateDate( |
| 320 | + {.year = 2017, .month = 11, .day = 16})), |
321 | 321 | .expected = Literal::Int(2)}, |
322 | 322 | TransformParam{.str = "Time", |
323 | | - // 22:31:08 in microseconds |
324 | 323 | .source_type = iceberg::time(), |
325 | | - .source = Literal::Time(81068000000), |
| 324 | + .source = Literal::Time(TemporalTestHelper::CreateTime( |
| 325 | + {.hour = 22, .minute = 31, .second = 8})), |
326 | 326 | .expected = Literal::Int(3)}, |
327 | 327 | TransformParam{.str = "Timestamp", |
328 | 328 | // 2017-11-16T22:31:08 in microseconds |
329 | 329 | .source_type = iceberg::timestamp(), |
330 | | - .source = Literal::Timestamp(1510871468000000), |
| 330 | + .source = Literal::Timestamp( |
| 331 | + TemporalTestHelper::CreateTimestamp({.year = 2017, |
| 332 | + .month = 11, |
| 333 | + .day = 16, |
| 334 | + .hour = 22, |
| 335 | + .minute = 31, |
| 336 | + .second = 8})), |
331 | 337 | .expected = Literal::Int(3)}, |
332 | | - TransformParam{.str = "TimestampTz", |
333 | | - // 2017-11-16T22:31:08.000001 in microseconds |
334 | | - .source_type = iceberg::timestamp_tz(), |
335 | | - .source = Literal::TimestampTz(1510871468000001), |
336 | | - .expected = Literal::Int(2)}, |
| 338 | + TransformParam{ |
| 339 | + .str = "TimestampTz", |
| 340 | + // 2017-11-16T14:31:08.000001-08:00 in microseconds |
| 341 | + .source_type = iceberg::timestamp_tz(), |
| 342 | + .source = Literal::TimestampTz( |
| 343 | + TemporalTestHelper::CreateTimestampTz({.year = 2017, |
| 344 | + .month = 11, |
| 345 | + .day = 16, |
| 346 | + .hour = 14, |
| 347 | + .minute = 31, |
| 348 | + .second = 8, |
| 349 | + .microsecond = 1, |
| 350 | + .tz_offset_minutes = -480})), |
| 351 | + .expected = Literal::Int(2)}, |
337 | 352 | TransformParam{.str = "String", |
338 | 353 | .source_type = iceberg::string(), |
339 | 354 | .source = Literal::String("iceberg"), |
@@ -428,19 +443,36 @@ TEST_P(YearTransformTest, YearTransform) { |
428 | 443 |
|
429 | 444 | INSTANTIATE_TEST_SUITE_P( |
430 | 445 | YearTransformTests, YearTransformTest, |
431 | | - ::testing::Values(TransformParam{.str = "Timestamp", |
432 | | - // 2021-06-01T11:43:20Z |
433 | | - .source_type = iceberg::timestamp(), |
434 | | - .source = Literal::Timestamp(1622547800000000), |
435 | | - .expected = Literal::Int(2021)}, |
436 | | - TransformParam{.str = "TimestampTz", |
437 | | - .source_type = iceberg::timestamp_tz(), |
438 | | - .source = Literal::TimestampTz(1622547800000000), |
439 | | - .expected = Literal::Int(2021)}, |
440 | | - TransformParam{.str = "Date", |
441 | | - .source_type = iceberg::date(), |
442 | | - .source = Literal::Date(30000), |
443 | | - .expected = Literal::Int(2052)}), |
| 446 | + ::testing::Values( |
| 447 | + TransformParam{.str = "Timestamp", |
| 448 | + // 2021-06-01T11:43:20Z |
| 449 | + .source_type = iceberg::timestamp(), |
| 450 | + .source = Literal::Timestamp( |
| 451 | + TemporalTestHelper::CreateTimestamp({.year = 2021, |
| 452 | + .month = 6, |
| 453 | + .day = 1, |
| 454 | + .hour = 11, |
| 455 | + .minute = 43, |
| 456 | + .second = 20})), |
| 457 | + .expected = Literal::Int(2021)}, |
| 458 | + TransformParam{ |
| 459 | + .str = "TimestampTz", |
| 460 | + // 2021-01-01T07:43:20+08:00, which is 2020-12-31T23:43:20Z |
| 461 | + .source_type = iceberg::timestamp_tz(), |
| 462 | + .source = Literal::TimestampTz( |
| 463 | + TemporalTestHelper::CreateTimestampTz({.year = 2021, |
| 464 | + .month = 1, |
| 465 | + .day = 1, |
| 466 | + .hour = 7, |
| 467 | + .minute = 43, |
| 468 | + .second = 20, |
| 469 | + .tz_offset_minutes = 480})), |
| 470 | + .expected = Literal::Int(2020)}, |
| 471 | + TransformParam{.str = "Date", |
| 472 | + .source_type = iceberg::date(), |
| 473 | + .source = Literal::Date(TemporalTestHelper::CreateDate( |
| 474 | + {.year = 2052, .month = 2, .day = 20})), |
| 475 | + .expected = Literal::Int(2052)}), |
444 | 476 | [](const ::testing::TestParamInfo<TransformParam>& info) { return info.param.str; }); |
445 | 477 |
|
446 | 478 | class MonthTransformTest : public ::testing::TestWithParam<TransformParam> {}; |
@@ -495,18 +527,35 @@ TEST_P(DayTransformTest, DayTransform) { |
495 | 527 |
|
496 | 528 | INSTANTIATE_TEST_SUITE_P( |
497 | 529 | DayTransformTests, DayTransformTest, |
498 | | - ::testing::Values(TransformParam{.str = "Timestamp", |
499 | | - .source_type = iceberg::timestamp(), |
500 | | - .source = Literal::Timestamp(1622547800000000), |
501 | | - .expected = Literal::Int(18779)}, |
502 | | - TransformParam{.str = "TimestampTz", |
503 | | - .source_type = iceberg::timestamp_tz(), |
504 | | - .source = Literal::TimestampTz(1622547800000000), |
505 | | - .expected = Literal::Int(18779)}, |
506 | | - TransformParam{.str = "Date", |
507 | | - .source_type = iceberg::date(), |
508 | | - .source = Literal::Date(30000), |
509 | | - .expected = Literal::Int(30000)}), |
| 530 | + ::testing::Values( |
| 531 | + TransformParam{.str = "Timestamp", |
| 532 | + .source_type = iceberg::timestamp(), |
| 533 | + .source = Literal::Timestamp( |
| 534 | + TemporalTestHelper::CreateTimestamp({.year = 2021, |
| 535 | + .month = 6, |
| 536 | + .day = 1, |
| 537 | + .hour = 11, |
| 538 | + .minute = 43, |
| 539 | + .second = 20})), |
| 540 | + .expected = Literal::Int(TemporalTestHelper::CreateDate( |
| 541 | + {.year = 2021, .month = 6, .day = 1}))}, |
| 542 | + TransformParam{ |
| 543 | + .str = "TimestampTz", |
| 544 | + .source_type = iceberg::timestamp_tz(), |
| 545 | + .source = Literal::TimestampTz( |
| 546 | + TemporalTestHelper::CreateTimestampTz({.year = 2021, |
| 547 | + .month = 1, |
| 548 | + .day = 1, |
| 549 | + .hour = 7, |
| 550 | + .minute = 43, |
| 551 | + .second = 20, |
| 552 | + .tz_offset_minutes = 480})), |
| 553 | + .expected = Literal::Int( |
| 554 | + TemporalTestHelper::CreateDate({.year = 2020, .month = 12, .day = 31}))}, |
| 555 | + TransformParam{.str = "Date", |
| 556 | + .source_type = iceberg::date(), |
| 557 | + .source = Literal::Date(30000), |
| 558 | + .expected = Literal::Int(30000)}), |
510 | 559 | [](const ::testing::TestParamInfo<TransformParam>& info) { return info.param.str; }); |
511 | 560 |
|
512 | 561 | class HourTransformTest : public ::testing::TestWithParam<TransformParam> {}; |
|
0 commit comments