forked from deephaven/deephaven-core
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtime_unit_test.cc
More file actions
114 lines (89 loc) · 3.67 KB
/
time_unit_test.cc
File metadata and controls
114 lines (89 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
* Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
*/
#include <iostream>
#include "deephaven/third_party/catch.hpp"
#include "deephaven/tests/test_util.h"
#include "deephaven/client/utility/internal_types.h"
#include "deephaven/client/utility/misc_types.h"
#include "deephaven/dhcore/container/row_sequence.h"
#include "deephaven/dhcore/types.h"
using deephaven::client::Client;
using deephaven::client::TableHandle;
using deephaven::client::utility::TableMaker;
using deephaven::client::utility::internal::InternalDateTime;
using deephaven::client::utility::internal::InternalLocalTime;
using deephaven::dhcore::DateTime;
using deephaven::dhcore::DeephavenConstants;
using deephaven::dhcore::LocalDate;
using deephaven::dhcore::LocalTime;
using deephaven::dhcore::chunk::BooleanChunk;
using deephaven::dhcore::chunk::DateTimeChunk;
using deephaven::dhcore::chunk::LocalTimeChunk;
using deephaven::dhcore::container::RowSequence;
namespace deephaven::client::tests {
TEST_CASE("Uploaded Arrow Timestamp units get normalized to nanos at FillChunk time", "[timeunit]") {
auto tm = TableMakerForTests::Create();
std::vector<std::optional<InternalDateTime<arrow::TimeUnit::SECOND>>> dt_sec;
std::vector<std::optional<InternalDateTime<arrow::TimeUnit::MILLI>>> dt_milli;
std::vector<std::optional<InternalDateTime<arrow::TimeUnit::MICRO>>> dt_micro;
std::vector<std::optional<InternalDateTime<arrow::TimeUnit::NANO>>> dt_nano;
// First row: one second (in various units)
dt_sec.emplace_back(1);
dt_milli.emplace_back(1'000);
dt_micro.emplace_back(1'000'000);
dt_nano.emplace_back(1'000'000'000);
// Second row: null
dt_sec.emplace_back();
dt_milli.emplace_back();
dt_micro.emplace_back();
dt_nano.emplace_back();
TableMaker maker;
maker.AddColumn("dt_sec", dt_sec);
maker.AddColumn("dt_milli", dt_milli);
maker.AddColumn("dt_micro", dt_micro);
maker.AddColumn("dt_nano", dt_nano);
auto t = maker.MakeTable(tm.Client().GetManager());
std::cout << t.Stream(true) << '\n';
auto client_table = t.ToClientTable();
auto rs = RowSequence::CreateSequential(0, 2);
auto dest = DateTimeChunk::Create(2);
auto nulls = BooleanChunk::Create(2);
auto expected = DateTime::FromNanos(1'000'000'000);
for (size_t i = 0; i != client_table->NumColumns(); ++i) {
auto col = client_table->GetColumn(i);
col->FillChunk(*rs, &dest, &nulls);
CHECK(expected == dest.data()[0]);
CHECK(false == nulls.data()[0]);
CHECK(true == nulls.data()[1]);
}
}
TEST_CASE("Uploaded Arrow Time64 units get normalized to nanos at FillChunk time", "[timeunit]") {
auto tm = TableMakerForTests::Create();
std::vector<std::optional<InternalLocalTime<arrow::TimeUnit::MICRO>>> lt_micro;
std::vector<std::optional<InternalLocalTime<arrow::TimeUnit::NANO>>> lt_nano;
// First row: one second (in various units)
lt_micro.emplace_back(1'000'000);
lt_nano.emplace_back(1'000'000'000);
// Second row: null
lt_micro.emplace_back();
lt_nano.emplace_back();
TableMaker maker;
maker.AddColumn("lt_micro", lt_micro);
maker.AddColumn("lt_nano", lt_nano);
auto t = maker.MakeTable(tm.Client().GetManager());
std::cout << t.Stream(true) << '\n';
auto client_table = t.ToClientTable();
auto rs = RowSequence::CreateSequential(0, 2);
auto dest = LocalTimeChunk::Create(2);
auto nulls = BooleanChunk::Create(2);
auto expected = LocalTime::FromNanos(1'000'000'000);
for (size_t i = 0; i != client_table->NumColumns(); ++i) {
auto col = client_table->GetColumn(i);
col->FillChunk(*rs, &dest, &nulls);
CHECK(expected == dest.data()[0]);
CHECK(false == nulls.data()[0]);
CHECK(true == nulls.data()[1]);
}
}
} // namespace deephaven::client::tests