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
8using namespace chunk_processing;
9
10class JaggedArrayTest : public ::testing::Test {
11protected:
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
29TEST_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
37TEST_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
45TEST_F(JaggedArrayTest, Normalize2DJaggedArray) {
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
58TEST_F(JaggedArrayTest, Normalize3DJaggedArray) {
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
74TEST_F(JaggedArrayTest, HandleEmptyArrays) {
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
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
87TEST_F(JaggedArrayTest, ValidateJaggedArrays) {
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
std::vector< std::vector< double > > expected_normalized_2d
std::vector< std::vector< double > > jagged_2d
std::vector< std::vector< std::vector< double > > > expected_normalized_3d
std::vector< std::vector< std::vector< double > > > jagged_3d
A template class for managing and processing data in chunks.
Definition chunk.hpp:16
void validate_dimensions(const std::vector< U > &data, size_t expected_size=0)
Definition chunk.hpp:253
std::vector< std::vector< U > > handle_jagged_2d(const std::vector< std::vector< U > > &data)
Definition chunk.hpp:236
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(JaggedArrayTest, DetectJagged2DArray)
bool is_jagged(const std::vector< std::vector< T > > &data)
bool is_jagged_3d(const std::vector< std::vector< std::vector< T > > > &data)