underscore/tap.go
Ruidy f33e86d502
feat: add Tap, Transpose, Unzip, ParallelReduce, and Replicate (#49)
* feat: add Tap, Transpose, Unzip, ParallelReduce, and Replicate

- Add Tap: for side effects/debugging in pipelines
- Add Transpose: flip matrix rows and columns
- Add Unzip: split tuple slice into two slices
- Add ParallelReduce: parallel reduction (experimental)
- Add Replicate: create n copies of a value

Comprehensive tests included for all functions.

Resolves Issues 21, 22, 23, 24, 25

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* test: improve ParallelReduce test coverage to 97.5%

Add comprehensive tests covering:
- Default workers (workers <= 0)
- Negative workers
- Error handling and propagation
- Context cancellation during execution
- Context timeout
- Single element processing
- Many workers (more workers than elements)
- Benchmark for performance validation

Coverage increased from 68.75% to 97.5%

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-16 09:02:47 +01:00

12 lines
378 B
Go

package underscore
// Tap applies a function to each element for side effects (like debugging/logging)
// and returns the original slice unchanged. Useful for debugging pipelines.
//
// Example: Tap([]int{1,2,3}, func(n int) { fmt.Println(n) }) → [1,2,3] (and prints each)
func Tap[T any](values []T, fn func(T)) []T {
for _, v := range values {
fn(v)
}
return values
}