Skip to content

Commit 1a422a3

Browse files
committed
apply format
1 parent b74257e commit 1a422a3

1 file changed

Lines changed: 81 additions & 51 deletions

File tree

src/3_Stack_Queue/min_in_stack.cpp

Lines changed: 81 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,10 @@ template <typename T> class StackWithMin {
4646
if (empty()) {
4747
data.push(value);
4848
_min = value;
49-
}
50-
else if (value < *_min) {
49+
} else if (value < *_min) {
5150
data.push(2 * value - *_min);
5251
_min = value;
53-
}
54-
else {
52+
} else {
5553
data.push(value);
5654
}
5755
}
@@ -78,17 +76,11 @@ template <typename T> class StackWithMin {
7876
return (front < *_min) ? _min : front;
7977
}
8078

81-
std::optional<T> min() {
82-
return _min;
83-
}
79+
std::optional<T> min() { return _min; }
8480

85-
bool empty() {
86-
return data.empty();
87-
}
81+
bool empty() { return data.empty(); }
8882

89-
size_t size() {
90-
return data.size();
91-
}
83+
size_t size() { return data.size(); }
9284

9385
private:
9486
std::stack<T> data;
@@ -140,8 +132,10 @@ void test() {
140132

141133
// If pop() is supposed to be safe on empty, this should not crash.
142134
stack.pop();
143-
runner.expectEqual(stack.min(), std::optional<int>{}, "min still empty after pop on empty");
144-
runner.expectEqual(stack.top(), std::optional<int>{}, "top still empty after pop on empty");
135+
runner.expectEqual(stack.min(), std::optional<int>{},
136+
"min still empty after pop on empty");
137+
runner.expectEqual(stack.top(), std::optional<int>{},
138+
"top still empty after pop on empty");
145139
}
146140

147141
// 2) Basic push/pop + popping all the way to empty
@@ -158,12 +152,16 @@ void test() {
158152
runner.expectEqual(stack.top(), std::optional<int>(5), "top after pop");
159153

160154
stack.pop(); // removes 5
161-
runner.expectEqual(stack.min(), std::optional<int>(10), "min after pop to single");
162-
runner.expectEqual(stack.top(), std::optional<int>(10), "top after pop to single");
155+
runner.expectEqual(stack.min(), std::optional<int>(10),
156+
"min after pop to single");
157+
runner.expectEqual(stack.top(), std::optional<int>(10),
158+
"top after pop to single");
163159

164160
stack.pop(); // removes 10 -> empty
165-
runner.expectEqual(stack.min(), std::optional<int>{}, "min after popping to empty");
166-
runner.expectEqual(stack.top(), std::optional<int>{}, "top after popping to empty");
161+
runner.expectEqual(stack.min(), std::optional<int>{},
162+
"min after popping to empty");
163+
runner.expectEqual(stack.top(), std::optional<int>{},
164+
"top after popping to empty");
167165
}
168166

169167
// 3) Negative values + restore
@@ -172,7 +170,8 @@ void test() {
172170
stack.push(-1);
173171
stack.push(7);
174172
stack.push(-2);
175-
runner.expectEqual(stack.min(), std::optional<int>(-2), "min with negative");
173+
runner.expectEqual(stack.min(), std::optional<int>(-2),
174+
"min with negative");
176175

177176
stack.pop();
178177
runner.expectEqual(stack.min(), std::optional<int>(-1), "min restored");
@@ -187,20 +186,28 @@ void test() {
187186
stack.push(1);
188187
stack.push(2);
189188

190-
runner.expectEqual(stack.min(), std::optional<int>(1), "min with duplicates");
191-
runner.expectEqual(stack.top(), std::optional<int>(2), "top with duplicates");
189+
runner.expectEqual(stack.min(), std::optional<int>(1),
190+
"min with duplicates");
191+
runner.expectEqual(stack.top(), std::optional<int>(2),
192+
"top with duplicates");
192193

193194
stack.pop(); // pop 2
194-
runner.expectEqual(stack.min(), std::optional<int>(1), "min after popping non-min");
195-
runner.expectEqual(stack.top(), std::optional<int>(1), "top after popping non-min");
195+
runner.expectEqual(stack.min(), std::optional<int>(1),
196+
"min after popping non-min");
197+
runner.expectEqual(stack.top(), std::optional<int>(1),
198+
"top after popping non-min");
196199

197200
stack.pop(); // pop 1 (still another 1 remains)
198-
runner.expectEqual(stack.min(), std::optional<int>(1), "min remains after popping one duplicate min");
199-
runner.expectEqual(stack.top(), std::optional<int>(1), "top now duplicate min");
201+
runner.expectEqual(stack.min(), std::optional<int>(1),
202+
"min remains after popping one duplicate min");
203+
runner.expectEqual(stack.top(), std::optional<int>(1),
204+
"top now duplicate min");
200205

201206
stack.pop(); // pop last 1, min should restore to 3
202-
runner.expectEqual(stack.min(), std::optional<int>(3), "min restores after all duplicate mins removed");
203-
runner.expectEqual(stack.top(), std::optional<int>(3), "top restores after all duplicate mins removed");
207+
runner.expectEqual(stack.min(), std::optional<int>(3),
208+
"min restores after all duplicate mins removed");
209+
runner.expectEqual(stack.top(), std::optional<int>(3),
210+
"top restores after all duplicate mins removed");
204211
}
205212

206213
// 5) All equal values
@@ -210,15 +217,20 @@ void test() {
210217
stack.push(4);
211218
stack.push(4);
212219

213-
runner.expectEqual(stack.min(), std::optional<int>(4), "min with all equal");
214-
runner.expectEqual(stack.top(), std::optional<int>(4), "top with all equal");
220+
runner.expectEqual(stack.min(), std::optional<int>(4),
221+
"min with all equal");
222+
runner.expectEqual(stack.top(), std::optional<int>(4),
223+
"top with all equal");
215224

216225
stack.pop();
217-
runner.expectEqual(stack.min(), std::optional<int>(4), "min after pop with all equal");
226+
runner.expectEqual(stack.min(), std::optional<int>(4),
227+
"min after pop with all equal");
218228
stack.pop();
219-
runner.expectEqual(stack.min(), std::optional<int>(4), "min after second pop with all equal");
229+
runner.expectEqual(stack.min(), std::optional<int>(4),
230+
"min after second pop with all equal");
220231
stack.pop();
221-
runner.expectEqual(stack.min(), std::optional<int>{}, "min after popping all equal to empty");
232+
runner.expectEqual(stack.min(), std::optional<int>{},
233+
"min after popping all equal to empty");
222234
}
223235

224236
// 6) Monotonic increasing: min should stay first element until empty
@@ -229,34 +241,44 @@ void test() {
229241
stack.push(3);
230242
stack.push(4);
231243

232-
runner.expectEqual(stack.min(), std::optional<int>(1), "min in increasing sequence");
244+
runner.expectEqual(stack.min(), std::optional<int>(1),
245+
"min in increasing sequence");
233246
stack.pop(); // 4
234-
runner.expectEqual(stack.min(), std::optional<int>(1), "min after pop in increasing sequence");
247+
runner.expectEqual(stack.min(), std::optional<int>(1),
248+
"min after pop in increasing sequence");
235249
stack.pop(); // 3
236-
runner.expectEqual(stack.min(), std::optional<int>(1), "min after second pop in increasing sequence");
250+
runner.expectEqual(stack.min(), std::optional<int>(1),
251+
"min after second pop in increasing sequence");
237252
}
238253

239254
// 7) Monotonic decreasing: min updates each push, restores each pop
240255
{
241256
StackWithMin<int> stack;
242257
stack.push(4);
243-
runner.expectEqual(stack.min(), std::optional<int>(4), "min after push 4 (decreasing)");
258+
runner.expectEqual(stack.min(), std::optional<int>(4),
259+
"min after push 4 (decreasing)");
244260

245261
stack.push(3);
246-
runner.expectEqual(stack.min(), std::optional<int>(3), "min after push 3 (decreasing)");
262+
runner.expectEqual(stack.min(), std::optional<int>(3),
263+
"min after push 3 (decreasing)");
247264

248265
stack.push(2);
249-
runner.expectEqual(stack.min(), std::optional<int>(2), "min after push 2 (decreasing)");
266+
runner.expectEqual(stack.min(), std::optional<int>(2),
267+
"min after push 2 (decreasing)");
250268

251269
stack.push(1);
252-
runner.expectEqual(stack.min(), std::optional<int>(1), "min after push 1 (decreasing)");
270+
runner.expectEqual(stack.min(), std::optional<int>(1),
271+
"min after push 1 (decreasing)");
253272

254273
stack.pop(); // 1
255-
runner.expectEqual(stack.min(), std::optional<int>(2), "min restores to 2 after popping 1");
274+
runner.expectEqual(stack.min(), std::optional<int>(2),
275+
"min restores to 2 after popping 1");
256276
stack.pop(); // 2
257-
runner.expectEqual(stack.min(), std::optional<int>(3), "min restores to 3 after popping 2");
277+
runner.expectEqual(stack.min(), std::optional<int>(3),
278+
"min restores to 3 after popping 2");
258279
stack.pop(); // 3
259-
runner.expectEqual(stack.min(), std::optional<int>(4), "min restores to 4 after popping 3");
280+
runner.expectEqual(stack.min(), std::optional<int>(4),
281+
"min restores to 4 after popping 3");
260282
}
261283

262284
// 8) Longer deterministic sequence: validate min after every push and pop
@@ -269,40 +291,48 @@ void test() {
269291
for (int i = 50; i >= 26; --i) {
270292
stack.push(i);
271293
expectedMin = std::min(expectedMin, i);
272-
runner.expectEqual(stack.min(), std::optional<int>(expectedMin), "min after push in long sequence (part 1)");
294+
runner.expectEqual(stack.min(), std::optional<int>(expectedMin),
295+
"min after push in long sequence (part 1)");
273296
}
274297

275298
stack.push(0);
276299
expectedMin = 0;
277-
runner.expectEqual(stack.min(), std::optional<int>(0), "min after pushing 0 in long sequence");
300+
runner.expectEqual(stack.min(), std::optional<int>(0),
301+
"min after pushing 0 in long sequence");
278302

279303
for (int i = 25; i >= 1; --i) {
280304
stack.push(i);
281-
runner.expectEqual(stack.min(), std::optional<int>(0), "min stays 0 in long sequence (part 2)");
305+
runner.expectEqual(stack.min(), std::optional<int>(0),
306+
"min stays 0 in long sequence (part 2)");
282307
}
283308

284309
// Now pop everything above 0; min should stay 0 until 0 is popped.
285310
for (int i = 1; i <= 25; ++i) {
286311
stack.pop();
287-
runner.expectEqual(stack.min(), std::optional<int>(0), "min stays 0 while popping down to 0");
312+
runner.expectEqual(stack.min(), std::optional<int>(0),
313+
"min stays 0 while popping down to 0");
288314
}
289315

290316
// Pop 0; min should restore to 26 (the smallest remaining from 26..50)
291317
stack.pop();
292-
runner.expectEqual(stack.min(), std::optional<int>(26), "min restores after popping 0");
318+
runner.expectEqual(stack.min(), std::optional<int>(26),
319+
"min restores after popping 0");
293320

294321
// Pop remaining; min should climb upward as we remove 26,27,...
295322
for (int expected = 27; expected <= 50; ++expected) {
296323
stack.pop();
297324
runner.expectEqual(stack.min(),
298-
(expected <= 50 ? std::optional<int>(expected) : std::optional<int>{}),
325+
(expected <= 50 ? std::optional<int>(expected)
326+
: std::optional<int>{}),
299327
"min after popping in long sequence tail");
300328
}
301329
stack.pop();
302330

303331
// After all popped, empty
304-
runner.expectEqual(stack.min(), std::optional<int>{}, "min empty at end of long sequence");
305-
runner.expectEqual(stack.top(), std::optional<int>{}, "top empty at end of long sequence");
332+
runner.expectEqual(stack.min(), std::optional<int>{},
333+
"min empty at end of long sequence");
334+
runner.expectEqual(stack.top(), std::optional<int>{},
335+
"top empty at end of long sequence");
306336
}
307337

308338
runner.summary();

0 commit comments

Comments
 (0)