Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
sub_chunk_strategies_test.cpp File Reference

Test suite for sub-chunking strategies. More...

#include "chunk_strategies.hpp"
#include "test_base.hpp"
#include <gtest/gtest.h>
#include <iostream>
#include <memory>
#include <vector>
+ Include dependency graph for sub_chunk_strategies_test.cpp:

Go to the source code of this file.

Classes

class  SubChunkStrategiesTest
 Test fixture for sub-chunking strategy tests. More...
 

Functions

 TEST_F (SubChunkStrategiesTest, ConditionalStrategyTest)
 
 TEST_F (SubChunkStrategiesTest, EmptyDataTest)
 
 TEST_F (SubChunkStrategiesTest, HierarchicalStrategyTest)
 
 TEST_F (SubChunkStrategiesTest, RecursiveStrategyTest)
 

Detailed Description

Test suite for sub-chunking strategies.

This file contains comprehensive tests for:

  • Recursive sub-chunking
  • Hierarchical sub-chunking
  • Conditional sub-chunking
  • Edge cases and error conditions

Definition in file sub_chunk_strategies_test.cpp.

Function Documentation

◆ TEST_F() [1/4]

TEST_F ( SubChunkStrategiesTest  ,
ConditionalStrategyTest   
)

Definition at line 91 of file sub_chunk_strategies_test.cpp.

91 {
92 try {
93 // Create condition function
94 auto condition = [](const std::vector<double>& chunk) { return chunk.size() > 4; };
95
96 // Create and validate base strategy
97 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(5.0);
98 if (!variance_strategy) {
99 FAIL() << "Failed to create variance strategy";
100 }
101
102 // Create conditional strategy
104 variance_strategy, condition, 2);
105
106 // Apply strategy and validate results
107 auto result = conditional_strategy.apply(test_data);
108 ASSERT_GT(result.size(), 0) << "Result should not be empty";
109
110 // Validate chunk sizes
111 for (const auto& chunk : result) {
112 ASSERT_GE(chunk.size(), 2) << "Chunk size should be at least 2";
113 }
114 } catch (const std::exception& e) {
115 FAIL() << "Exception thrown: " << e.what();
116 }
117}

References chunk_processing::ConditionalSubChunkStrategy< T >::apply().

◆ TEST_F() [2/4]

TEST_F ( SubChunkStrategiesTest  ,
EmptyDataTest   
)

Definition at line 119 of file sub_chunk_strategies_test.cpp.

119 {
120 try {
121 std::vector<double> empty_data;
122
123 // Create and validate base strategy
124 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(3.0);
125 if (!variance_strategy) {
126 FAIL() << "Failed to create variance strategy";
127 }
128
129 // Test recursive strategy
130 {
132 variance_strategy, 2, 2);
133 auto result = recursive_strategy.apply(empty_data);
134 EXPECT_TRUE(result.empty())
135 << "Recursive strategy should return empty result for empty data";
136 }
137
138 // Test hierarchical strategy
139 {
140 std::vector<std::shared_ptr<chunk_processing::ChunkStrategy<double>>> strategies{
141 variance_strategy};
142 chunk_processing::HierarchicalSubChunkStrategy<double> hierarchical_strategy(strategies,
143 2);
144 auto result = hierarchical_strategy.apply(empty_data);
145 EXPECT_TRUE(result.empty())
146 << "Hierarchical strategy should return empty result for empty data";
147 }
148
149 // Test conditional strategy
150 {
151 auto condition = [](const std::vector<double>& chunk) { return chunk.size() > 4; };
153 variance_strategy, condition, 2);
154 auto result = conditional_strategy.apply(empty_data);
155 EXPECT_TRUE(result.empty())
156 << "Conditional strategy should return empty result for empty data";
157 }
158 } catch (const std::exception& e) {
159 FAIL() << "Exception thrown: " << e.what();
160 }
161}

References chunk_processing::RecursiveSubChunkStrategy< T >::apply(), chunk_processing::HierarchicalSubChunkStrategy< T >::apply(), and chunk_processing::ConditionalSubChunkStrategy< T >::apply().

◆ TEST_F() [3/4]

TEST_F ( SubChunkStrategiesTest  ,
HierarchicalStrategyTest   
)

Definition at line 59 of file sub_chunk_strategies_test.cpp.

59 {
60 try {
61 // Create and validate strategies
62 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(5.0);
63 auto entropy_strategy = std::make_shared<chunk_processing::EntropyStrategy<double>>(1.0);
64
65 if (!variance_strategy || !entropy_strategy) {
66 FAIL() << "Failed to create strategies";
67 }
68
69 // Create strategy vector
70 std::vector<std::shared_ptr<chunk_processing::ChunkStrategy<double>>> strategies;
71 strategies.reserve(2); // Pre-reserve space
72 strategies.push_back(variance_strategy);
73 strategies.push_back(entropy_strategy);
74
75 // Create hierarchical strategy
76 chunk_processing::HierarchicalSubChunkStrategy<double> hierarchical_strategy(strategies, 2);
77
78 // Apply strategy and validate results
79 auto result = hierarchical_strategy.apply(test_data);
80 ASSERT_GT(result.size(), 0) << "Result should not be empty";
81
82 // Validate chunk sizes
83 for (const auto& chunk : result) {
84 ASSERT_GE(chunk.size(), 2) << "Chunk size should be at least 2";
85 }
86 } catch (const std::exception& e) {
87 FAIL() << "Exception thrown: " << e.what();
88 }
89}

References chunk_processing::HierarchicalSubChunkStrategy< T >::apply().

◆ TEST_F() [4/4]

TEST_F ( SubChunkStrategiesTest  ,
RecursiveStrategyTest   
)

Definition at line 42 of file sub_chunk_strategies_test.cpp.

42 {
43 std::unique_lock<std::mutex> lock(global_test_mutex_);
44
45 auto variance_strategy = std::make_shared<chunk_processing::VarianceStrategy<double>>(3.0);
46 ASSERT_TRUE(is_valid_resource(variance_strategy));
47
48 chunk_processing::RecursiveSubChunkStrategy<double> recursive_strategy(variance_strategy, 3, 2);
49 auto result = recursive_strategy.apply(test_data);
50
51 lock.unlock();
52
53 ASSERT_GT(result.size(), 0);
54 for (const auto& chunk : result) {
55 ASSERT_GE(chunk.size(), 2);
56 }
57}

References chunk_processing::RecursiveSubChunkStrategy< T >::apply().