Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
advanced_chunk_strategies_test.cpp
Go to the documentation of this file.
2#include <functional>
3#include <gtest/gtest.h>
4#include <vector>
5
6class AdvancedChunkStrategiesTest : public ::testing::Test {
7protected:
8 std::vector<double> test_data = {1.0, 2.0, 3.0, 1.0, 2.0, 3.0};
9 std::vector<int> cyclic_data = {1, 2, 3, 1, 2, 3, 1, 2, 3};
10 std::vector<double> single_element = {1.0};
11 std::vector<double> empty_data;
12 std::vector<std::vector<double>> multi_dim_data = {
13 {1.0, 2.0}, {2.0, 3.0}, {3.0, 4.0}, {1.0, 2.0}, {2.0, 3.0}};
14};
15
16TEST_F(AdvancedChunkStrategiesTest, PatternBasedPredicate) {
17 auto predicate = [](double val) { return val > 2.0; };
19
20 auto chunks = strategy.apply(test_data);
21 EXPECT_GT(chunks.size(), 0);
22}
23
24TEST_F(AdvancedChunkStrategiesTest, PatternBasedCyclicDetection) {
25 chunk_processing::PatternBasedStrategy<int> strategy(3); // Pattern size of 3
26 auto chunks = strategy.apply(cyclic_data);
27
28 EXPECT_GT(chunks.size(), 0);
29 for (const auto& chunk : chunks) {
30 EXPECT_EQ(chunk.size(), 3);
31 }
32}
33
34TEST_F(AdvancedChunkStrategiesTest, SingleElementInput) {
35 // Test with pattern size
37 auto size_chunks = size_strategy.apply(single_element);
38 EXPECT_EQ(size_chunks.size(), 1);
39 EXPECT_EQ(size_chunks[0].size(), 1);
40
41 // Test with predicate
42 chunk_processing::PatternBasedStrategy<double> pred_strategy([](double) { return true; });
43 auto pred_chunks = pred_strategy.apply(single_element);
44 EXPECT_EQ(pred_chunks.size(), 1);
45 EXPECT_EQ(pred_chunks[0].size(), 1);
46}
47
49 // Test with pattern size
51 auto size_chunks = size_strategy.apply(empty_data);
52 EXPECT_TRUE(size_chunks.empty());
53
54 // Test with predicate
55 chunk_processing::PatternBasedStrategy<double> pred_strategy([](double) { return true; });
56 auto pred_chunks = pred_strategy.apply(empty_data);
57 EXPECT_TRUE(pred_chunks.empty());
58}
59
60TEST_F(AdvancedChunkStrategiesTest, MultiDimensionalThresholds) {
61 auto vector_distance = [](const std::vector<double>& a, const std::vector<double>& b) {
62 double sum = 0.0;
63 for (size_t i = 0; i < a.size(); ++i) {
64 sum += (a[i] - b[i]) * (a[i] - b[i]);
65 }
66 return std::sqrt(sum);
67 };
68
69 auto predicate = [vector_distance](const std::vector<double>& vec) {
70 return vector_distance(vec, {0.0, 0.0}) > 2.0;
71 };
72
74 auto chunks = strategy.apply(multi_dim_data);
75
76 EXPECT_GT(chunks.size(), 0);
77 for (const auto& chunk : chunks) {
78 EXPECT_GT(chunk.size(), 0);
79 for (const auto& vec : chunk) {
80 EXPECT_EQ(vec.size(), 2);
81 }
82 }
83}
TEST_F(AdvancedChunkStrategiesTest, PatternBasedPredicate)
Defines various strategies for chunking data based on different criteria.
std::vector< std::vector< double > > multi_dim_data
std::vector< std::vector< T > > apply(const std::vector< T > &data) const override