55 lines
1.6 KiB
Dart
55 lines
1.6 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]"
|
|
library;
|
|
|
|
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;
|
|
}
|
|
}
|