Files
dataStructures/tests/maxSubarray_test.go
2026-05-27 16:53:29 -04:00

104 lines
2.2 KiB
Go

package tests
import (
"testing"
"datastructures/algo"
)
// --- basic profit cases ---
func TestMaxSubarray_BasicProfit(t *testing.T) {
// buy at 1, sell at 6 → 5
got := algo.MaxSubarray([]int{7, 1, 5, 3, 6, 4})
if got != 5 {
t.Errorf("expected 5, got %d", got)
}
}
func TestMaxSubarray_ProfitAtEnd(t *testing.T) {
// buy at 1, sell at 9 → 8
got := algo.MaxSubarray([]int{3, 1, 4, 1, 5, 9})
if got != 8 {
t.Errorf("expected 8, got %d", got)
}
}
func TestMaxSubarray_AlreadySorted(t *testing.T) {
// buy at 1, sell at 5 → 4
got := algo.MaxSubarray([]int{1, 2, 3, 4, 5})
if got != 4 {
t.Errorf("expected 4, got %d", got)
}
}
// --- no profit cases ---
func TestMaxSubarray_StrictlyDecreasing(t *testing.T) {
// prices only fall; no profitable trade
got := algo.MaxSubarray([]int{5, 4, 3, 2, 1})
if got != 0 {
t.Errorf("expected 0, got %d", got)
}
}
func TestMaxSubarray_AllSame(t *testing.T) {
got := algo.MaxSubarray([]int{3, 3, 3, 3})
if got != 0 {
t.Errorf("expected 0, got %d", got)
}
}
// --- single element ---
func TestMaxSubarray_SingleElement(t *testing.T) {
got := algo.MaxSubarray([]int{42})
if got != 0 {
t.Errorf("expected 0, got %d", got)
}
}
// --- two elements ---
func TestMaxSubarray_TwoElementsProfit(t *testing.T) {
got := algo.MaxSubarray([]int{1, 10})
if got != 9 {
t.Errorf("expected 9, got %d", got)
}
}
func TestMaxSubarray_TwoElementsLoss(t *testing.T) {
got := algo.MaxSubarray([]int{10, 1})
if got != 0 {
t.Errorf("expected 0, got %d", got)
}
}
// --- minimum appears late ---
func TestMaxSubarray_MinInMiddle(t *testing.T) {
// dip to 2 at index 3, then rises to 8
got := algo.MaxSubarray([]int{5, 4, 3, 2, 8})
if got != 6 {
t.Errorf("expected 6, got %d", got)
}
}
// --- negative values ---
func TestMaxSubarray_AllNegative(t *testing.T) {
// minimum tracks most negative; no positive spread possible
got := algo.MaxSubarray([]int{-5, -3, -1})
if got != 4 {
t.Errorf("expected 4, got %d", got)
}
}
func TestMaxSubarray_MixedNegativePositive(t *testing.T) {
// buy at -3, sell at 5 → 8
got := algo.MaxSubarray([]int{2, -3, 1, 5})
if got != 8 {
t.Errorf("expected 8, got %d", got)
}
}