// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file contains tests for some of the internal functions.

package main

import (
	"fmt"
	"testing"
)

// Helpers to save typing in the test cases.
type u []uint64
type uu [][]uint64

type SplitTest struct {
	input  u
	output uu
	signed bool
}

var (
	m2  = uint64(2)
	m1  = uint64(1)
	m0  = uint64(0)
	m_1 = ^uint64(0)     // -1 when signed.
	m_2 = ^uint64(0) - 1 // -2 when signed.
)

var splitTests = []SplitTest{
	// No need for a test for the empty case; that's picked off before splitIntoRuns.
	// Single value.
	{u{1}, uu{u{1}}, false},
	// Out of order.
	{u{3, 2, 1}, uu{u{1, 2, 3}}, true},
	// Out of order.
	{u{3, 2, 1}, uu{u{1, 2, 3}}, false},
	// A gap at the beginning.
	{u{1, 33, 32, 31}, uu{u{1}, u{31, 32, 33}}, true},
	// A gap in the middle, in mixed order.
	{u{33, 7, 32, 31, 9, 8}, uu{u{7, 8, 9}, u{31, 32, 33}}, true},
	// Gaps throughout
	{u{33, 44, 1, 32, 45, 31}, uu{u{1}, u{31, 32, 33}, u{44, 45}}, true},
	// Unsigned values spanning 0.
	{u{m1, m0, m_1, m2, m_2}, uu{u{m0, m1, m2}, u{m_2, m_1}}, false},
	// Signed values spanning 0
	{u{m1, m0, m_1, m2, m_2}, uu{u{m_2, m_1, m0, m1, m2}}, true},
}

func TestSplitIntoRuns(t *testing.T) {
Outer:
	for n, test := range splitTests {
		values := make([]Value, len(test.input))
		for i, v := range test.input {
			values[i] = Value{"", "", v, test.signed, fmt.Sprint(v)}
		}
		runs := splitIntoRuns(values)
		if len(runs) != len(test.output) {
			t.Errorf("#%d: %v: got %d runs; expected %d", n, test.input, len(runs), len(test.output))
			continue
		}
		for i, run := range runs {
			if len(run) != len(test.output[i]) {
				t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
				continue Outer
			}
			for j, v := range run {
				if v.value != test.output[i][j] {
					t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
					continue Outer
				}
			}
		}
	}
}
