// Copyright (c) 2016 Bitfury Group Limited
// Distributed under the MIT software license, see the accompanying
// file LICENSE or http://www.opensource.org/licenses/mit-license.php

package graph

import (
	"reflect"
	"testing"
)

func TestKSP(t *testing.T) {
	g, v := newTestGraph()

	tests := []struct {
		Source, Target Vertex
		K              int
		ExpectedPaths  [][]Vertex
	}{
		{v[1], v[4], 10, [][]Vertex{
			{v[1], v[7], v[3], v[6], v[5], v[4]},
			{v[1], v[7], v[2], v[3], v[6], v[5], v[4]},
		},
		},
		{v[5], v[7], 1, [][]Vertex{
			{v[5], v[6], v[3], v[7]},
		},
		},
	}
	for _, test := range tests {
		paths, err := KShortestPaths(g, test.Source, test.Target, test.K)
		if err != nil {
			t.Errorf("KShortestPaths(g, %v, %v, %v) returns not nil error: %v", test.Source, test.Target, test.K, err)
		}
		if !reflect.DeepEqual(paths, test.ExpectedPaths) {
			t.Errorf("KShortestPaths(g, %v, %v, %v) = %v, want %v", test.Source, test.Target, test.K, paths, test.ExpectedPaths)
		}
	}
}