Advanced Chunk Processing Library
0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
jagged_array_test.cpp
Go to the documentation of this file.
1
#ifndef CHUNK_PROCESSING_JAGGED_ARRAY_TEST_HPP
2
#define CHUNK_PROCESSING_JAGGED_ARRAY_TEST_HPP
3
4
#include "
chunk.hpp
"
5
#include <gtest/gtest.h>
6
#include <vector>
7
8
using namespace
chunk_processing
;
9
10
class
JaggedArrayTest
:
public
::testing::Test {
11
protected
:
12
// 2D jagged array
13
std::vector<std::vector<double>>
jagged_2d
= {
14
{1.0, 2.0, 3.0}, {4.0, 5.0}, {6.0, 7.0, 8.0, 9.0}};
15
16
// 3D jagged array
17
std::vector<std::vector<std::vector<double>>>
jagged_3d
= {{{1.0, 2.0}, {3.0}},
18
{{4.0, 5.0, 6.0}, {7.0, 8.0}}};
19
20
// Expected normalized 2D array
21
std::vector<std::vector<double>>
expected_normalized_2d
= {
22
{1.0, 2.0, 3.0, 0.0}, {4.0, 5.0, 0.0, 0.0}, {6.0, 7.0, 8.0, 9.0}};
23
24
// Expected normalized 3D array
25
std::vector<std::vector<std::vector<double>>>
expected_normalized_3d
= {
26
{{1.0, 2.0, 0.0}, {3.0, 0.0, 0.0}}, {{4.0, 5.0, 6.0}, {7.0, 8.0, 0.0}}};
27
};
28
29
TEST_F
(
JaggedArrayTest
, DetectJagged2DArray) {
30
EXPECT_TRUE(
is_jagged
(jagged_2d));
31
32
std::vector<std::vector<double>> uniform_2d = {
33
{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}, {7.0, 8.0, 9.0}};
34
EXPECT_FALSE(
is_jagged
(uniform_2d));
35
}
36
37
TEST_F
(
JaggedArrayTest
, DetectJagged3DArray) {
38
EXPECT_TRUE(
is_jagged_3d
(jagged_3d));
39
40
std::vector<std::vector<std::vector<double>>> uniform_3d = {{{1.0, 2.0}, {3.0, 4.0}},
41
{{5.0, 6.0}, {7.0, 8.0}}};
42
EXPECT_FALSE(
is_jagged_3d
(uniform_3d));
43
}
44
45
TEST_F
(
JaggedArrayTest
, Normalize2DJaggedArray) {
46
Chunk<std::vector<double>
> chunker;
47
auto
normalized = chunker.
handle_jagged_2d
(jagged_2d);
48
49
EXPECT_EQ(normalized.size(), expected_normalized_2d.size());
50
for
(
size_t
i = 0; i < normalized.size(); ++i) {
51
EXPECT_EQ(normalized[i].size(), expected_normalized_2d[i].size());
52
for
(
size_t
j = 0; j < normalized[i].size(); ++j) {
53
EXPECT_DOUBLE_EQ(normalized[i][j], expected_normalized_2d[i][j]);
54
}
55
}
56
}
57
58
TEST_F
(
JaggedArrayTest
, Normalize3DJaggedArray) {
59
Chunk<std::vector<std::vector<double>
>> chunker;
60
auto
normalized = chunker.
handle_jagged_3d
(jagged_3d);
61
62
EXPECT_EQ(normalized.size(), expected_normalized_3d.size());
63
for
(
size_t
i = 0; i < normalized.size(); ++i) {
64
EXPECT_EQ(normalized[i].size(), expected_normalized_3d[i].size());
65
for
(
size_t
j = 0; j < normalized[i].size(); ++j) {
66
EXPECT_EQ(normalized[i][j].size(), expected_normalized_3d[i][j].size());
67
for
(
size_t
k = 0; k < normalized[i][j].size(); ++k) {
68
EXPECT_DOUBLE_EQ(normalized[i][j][k], expected_normalized_3d[i][j][k]);
69
}
70
}
71
}
72
}
73
74
TEST_F
(
JaggedArrayTest
, HandleEmptyArrays) {
75
Chunk<std::vector<double>
> chunker;
76
77
std::vector<std::vector<double>> empty_2d;
78
auto
normalized_2d = chunker.
handle_jagged_2d
(empty_2d);
79
EXPECT_TRUE(normalized_2d.empty());
80
81
Chunk<std::vector<std::vector<double>
>> chunker_3d;
82
std::vector<std::vector<std::vector<double>>> empty_3d;
83
auto
normalized_3d = chunker_3d.
handle_jagged_3d
(empty_3d);
84
EXPECT_TRUE(normalized_3d.empty());
85
}
86
87
TEST_F
(
JaggedArrayTest
, ValidateJaggedArrays) {
88
Chunk<std::vector<double>
> chunker;
89
90
// Should not throw for jagged arrays - they get normalized
91
EXPECT_NO_THROW(chunker.
validate_dimensions
(jagged_2d));
92
93
// Should not throw for empty inner arrays - they get normalized
94
std::vector<std::vector<double>> jagged_with_empty = {
95
{1.0, 2.0}, {3.0, 4.0, 5.0}, {}
// Empty inner array
96
};
97
EXPECT_NO_THROW(chunker.
validate_dimensions
(jagged_with_empty));
98
99
// Should still throw for invalid input
100
std::vector<std::vector<double>> invalid_data;
101
EXPECT_THROW(chunker.
validate_dimensions
(invalid_data, 5), std::invalid_argument);
102
}
103
104
#endif
// CHUNK_PROCESSING_JAGGED_ARRAY_TEST_HPP
chunk.hpp
JaggedArrayTest
Definition
jagged_array_test.cpp:10
JaggedArrayTest::expected_normalized_2d
std::vector< std::vector< double > > expected_normalized_2d
Definition
jagged_array_test.cpp:21
JaggedArrayTest::jagged_2d
std::vector< std::vector< double > > jagged_2d
Definition
jagged_array_test.cpp:13
JaggedArrayTest::expected_normalized_3d
std::vector< std::vector< std::vector< double > > > expected_normalized_3d
Definition
jagged_array_test.cpp:25
JaggedArrayTest::jagged_3d
std::vector< std::vector< std::vector< double > > > jagged_3d
Definition
jagged_array_test.cpp:17
chunk_processing::Chunk
A template class for managing and processing data in chunks.
Definition
chunk.hpp:16
chunk_processing::Chunk::validate_dimensions
void validate_dimensions(const std::vector< U > &data, size_t expected_size=0)
Definition
chunk.hpp:253
chunk_processing::Chunk::handle_jagged_2d
std::vector< std::vector< U > > handle_jagged_2d(const std::vector< std::vector< U > > &data)
Definition
chunk.hpp:236
chunk_processing::Chunk::handle_jagged_3d
std::vector< std::vector< std::vector< U > > > handle_jagged_3d(const std::vector< std::vector< std::vector< U > > > &data)
Definition
chunk.hpp:245
TEST_F
TEST_F(JaggedArrayTest, DetectJagged2DArray)
Definition
jagged_array_test.cpp:29
chunk_processing
Definition
chunk.hpp:9
chunk_processing::is_jagged
bool is_jagged(const std::vector< std::vector< T > > &data)
Definition
chunk_common.hpp:24
chunk_processing::is_jagged_3d
bool is_jagged_3d(const std::vector< std::vector< std::vector< T > > > &data)
Definition
chunk_common.hpp:34
tests
jagged_array_test.cpp
Generated on Sat Dec 28 2024 01:08:54 for Advanced Chunk Processing Library by
1.9.8