shad-go/hotelbusiness/hotels_test.go

90 lines
1.9 KiB
Go
Raw Normal View History

2020-02-24 19:54:48 +00:00
package hotelbusiness
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestComputeLoad_basic(t *testing.T) {
for _, tc := range []struct {
title string
guests []Guest
result []Load
}{
{
title: "empty input",
guests: []Guest{},
result: []Load{},
},
{
title: "one guest",
guests: []Guest{{1, 2}},
result: []Load{{1, 1}, {2, 0}},
},
{
title: "two guests, one-by-one, without any gaps",
guests: []Guest{{1, 2}, {2, 3}},
result: []Load{{1, 1}, {3, 0}},
},
{
title: "two guests, one-by-one, with a gap",
guests: []Guest{{1, 2}, {3, 4}},
result: []Load{{1, 1}, {2, 0}, {3, 1}, {4, 0}},
},
{
title: "two guests, together",
guests: []Guest{{1, 2}, {1, 2}},
result: []Load{{1, 2}, {2, 0}},
},
{
title: "overlapping",
guests: []Guest{{1, 3}, {3, 5}, {2, 4}},
result: []Load{{1, 1}, {2, 2}, {4, 1}, {5, 0}},
},
{
title: "stairs",
guests: []Guest{{1, 6}, {2, 5}, {3, 4}},
result: []Load{{1, 1}, {2, 2}, {3, 3}, {4, 2}, {5, 1}, {6, 0}},
},
2020-03-05 11:34:32 +00:00
{
2020-03-05 21:02:39 +00:00
title: "starting late",
2020-03-05 11:34:32 +00:00
guests: []Guest{{3, 7}, {5, 7}},
2020-03-05 21:02:39 +00:00
result: []Load{{3, 1}, {5, 2}, {7, 0}},
2020-03-05 11:34:32 +00:00
},
{
2020-03-05 21:02:39 +00:00
title: "unordered",
2020-03-05 11:34:32 +00:00
guests: []Guest{{4, 7}, {2, 4}, {2, 3}},
2020-03-05 21:02:39 +00:00
result: []Load{{2, 2}, {3, 1}, {7, 0}},
2020-03-05 11:34:32 +00:00
},
2020-02-24 19:54:48 +00:00
} {
t.Run(tc.title, func(t *testing.T) {
2021-02-26 18:20:48 +00:00
if len(tc.result) == 0 {
require.Empty(t, ComputeLoad(tc.guests))
} else {
require.Equal(t, tc.result, ComputeLoad(tc.guests))
}
2020-02-24 19:54:48 +00:00
})
}
}
func TestComputeLoad_stress1(t *testing.T) {
n := 1000000
g := make([]Guest, 0, 1000000)
for i := 0; i < n; i++ {
g = append(g, Guest{1, 2})
}
l := ComputeLoad(g)
require.Equal(t, []Load{{1, n}, {2, 0}}, l)
}
func TestComputeLoad_stress2(t *testing.T) {
n := 1000000
g := make([]Guest, 0, 1000000)
for i := 0; i < n; i++ {
g = append(g, Guest{i, i + 1})
}
l := ComputeLoad(g)
require.Equal(t, []Load{{0, 1}, {n, 0}}, l)
}