tdd-katas/lib/string_calculator.dart
fiatcode ab5a97acc8 GREEN: Implement feature to ignore numbers > 1000
- Added .where((n) => n <= 1000) filter
- Numbers greater than 1000 now excluded from sum
- Tests pass: '2,1001' returns 2, '1000,1001,2' returns 1002
2026-02-18 12:59:01 +07:00

51 lines
1.5 KiB
Dart

/// String Calculator - Buggy Implementation
/// This code has intentional bugs for the Bug Hunt Kata exercise
///
/// Requirements:
/// 1. Empty string returns 0
/// 2. Single number returns that number
/// 3. Two numbers comma-delimited returns sum
/// 4. Handle newlines as delimiters
/// 5. Support custom delimiters: "//[delimiter]\n[numbers]"
class StringCalculator {
int add(String numbers) {
// Bug 1: Empty string handling
if (numbers.isEmpty) {
return 0; // Fixed: Return 0 for empty string
}
// Bug 2: Single number parsing
if (!numbers.contains(',') && !numbers.contains('\n') && !numbers.startsWith('//')) {
return int.parse(numbers); // Fixed: Removed off-by-one error
}
String delimiter = ',';
String numbersToProcess = numbers;
// Custom delimiter support
if (numbers.startsWith('//')) {
// Bug 4: Custom delimiter not actually used
final parts = numbers.split('\n');
delimiter = parts[0].substring(2); // Fixed: Extract custom delimiter
numbersToProcess = parts.skip(1).join('\n');
}
// Bug 3 & 4: Delimiter handling issues
final numList = numbersToProcess
.replaceAll('\n', delimiter)
.split(delimiter)
.where((s) => s.isNotEmpty)
.map((s) => int.parse(s))
.where((n) => n <= 1000) // Filter out numbers > 1000
.toList();
// Bug 3: Off-by-one in summation
int sum = 0;
for (int i = 0; i < numList.length; i++) { // Fixed: Include last element
sum += numList[i];
}
return sum;
}
}