@@ -50,6 +50,86 @@ TEST(TSListTest, ObjectIterator) {
50
50
});
51
51
}
52
52
53
+ // Test TSList::for_each with size parameter (object specialization)
54
+ TEST (TSListTest, ObjectForEachWithSize) {
55
+ TSList<int > list;
56
+ auto it1 = list.push_back (10 );
57
+ auto it2 = list.push_back (20 );
58
+ auto it3 = list.push_back (30 );
59
+ std::vector<int > values;
60
+ std::vector<size_t > sizes;
61
+ list.for_each ([&](const int & v, size_t size) {
62
+ values.push_back (v);
63
+ sizes.push_back (size);
64
+ });
65
+ EXPECT_EQ (values.size (), 3u );
66
+ EXPECT_EQ (sizes[0 ], 3u );
67
+ EXPECT_EQ (sizes[1 ], 3u );
68
+ EXPECT_EQ (sizes[2 ], 3u );
69
+ EXPECT_EQ (values[0 ], 10 );
70
+ EXPECT_EQ (values[1 ], 20 );
71
+ EXPECT_EQ (values[2 ], 30 );
72
+ }
73
+
74
+ // Test TSList::erase returns new size (object specialization)
75
+ TEST (TSListTest, ObjectEraseReturnsSize) {
76
+ TSList<int > list;
77
+ auto it1 = list.push_back (1 );
78
+ auto it2 = list.push_back (2 );
79
+ auto it3 = list.push_back (3 );
80
+ EXPECT_EQ (list.erase (it2), 2u );
81
+ EXPECT_EQ (list.erase (it1), 1u );
82
+ EXPECT_EQ (list.erase (it3), 0u );
83
+ }
84
+
85
+ // Test TSList::for_each with size parameter (pointer specialization)
86
+ TEST (TSListTest, PointerForEachWithSize) {
87
+ TSList<int *> list;
88
+ auto it1 = list.push_back (new int (100 ));
89
+ auto it2 = list.push_back (new int (200 ));
90
+ auto it3 = list.push_back (new int (300 ));
91
+ std::vector<int > values;
92
+ std::vector<size_t > sizes;
93
+ list.for_each ([&](int * v, size_t size) {
94
+ values.push_back (*v);
95
+ sizes.push_back (size);
96
+ });
97
+ EXPECT_EQ (values.size (), 3u );
98
+ EXPECT_EQ (sizes[0 ], 3u );
99
+ EXPECT_EQ (sizes[1 ], 3u );
100
+ EXPECT_EQ (sizes[2 ], 3u );
101
+ EXPECT_EQ (values[0 ], 100 );
102
+ EXPECT_EQ (values[1 ], 200 );
103
+ EXPECT_EQ (values[2 ], 300 );
104
+ // Clean up
105
+ int * tmp = *it1;
106
+ delete tmp;
107
+ tmp = *it2;
108
+ delete tmp;
109
+ tmp = *it3;
110
+ delete tmp;
111
+ list.erase (it1);
112
+ list.erase (it2);
113
+ list.erase (it3);
114
+ }
115
+
116
+ // Test TSList::erase returns new size (pointer specialization)
117
+ TEST (TSListTest, PointerEraseReturnsSize) {
118
+ TSList<int *> list;
119
+ auto it1 = list.push_back (new int (1 ));
120
+ auto it2 = list.push_back (new int (2 ));
121
+ auto it3 = list.push_back (new int (3 ));
122
+ int * p1 = *it1;
123
+ int * p2 = *it2;
124
+ int * p3 = *it3;
125
+ EXPECT_EQ (list.erase (it2), 2u );
126
+ EXPECT_EQ (list.erase (it1), 1u );
127
+ EXPECT_EQ (list.erase (it3), 0u );
128
+ delete p1;
129
+ delete p2;
130
+ delete p3;
131
+ }
132
+
53
133
TEST (TSListTest, PointerIterator) {
54
134
TSList<int *> list;
55
135
auto it1 = list.push_back (new int (1 ));
0 commit comments