package main

import (
	"testing"
)

func TestBusShouldHaveTimetable(t *testing.T) {
	start := 939
	tests := []Bus{7, 13, 19, 31, 59}
	expected := []int{945, 949, 950, 961, 944}

	for i, test := range tests {
		result := test.NextDeparture(start)
		if result != expected[i] {
			t.Errorf("Bus %d: got %d, expected %d", test, result, expected[i])
		}
	}
}

func TestTask1ShouldFindResult(t *testing.T) {
	start := 939
	input := []Bus{7, 13, -1, -1, 59, -1, 31, 19}
	expected := 295

	result := Task1(start, input)
	if result != expected {
		t.Errorf("got %d, expected %d", result, expected)
	}
}

func TestTask2ShouldFindResult(t *testing.T) {
	tests := [][]Bus{
		{7, 13, -1, -1, 59, -1, 31, 19},
		{17, -1, 13, 19},
		{67, 7, 59, 61},
		{67, -1, 7, 59, 61},
		{67, 7, -1, 59, 61},
		{1789, 37, 47, 1889},
	}
	expected := []int{1068781, 3417, 754018, 779210, 1261476, 1202161486}

	for i, test := range tests {
		result := Task2(test)
		if result != expected[i] {
			t.Errorf("%d: got %d, expected %d", i, result, expected)
		}
	}
}