// Copyright (c) 2013-2014 The btcsuite developers
// Copyright (c) 2015-2018 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.

package blockchain_test

import (
	"reflect"
	"sort"
	"testing"

	"github.com/decred/dcrd/blockchain"
)

// TestTimeSorter tests the timeSorter implementation.
func TestTimeSorter(t *testing.T) {
	tests := []struct {
		in   []int64
		want []int64
	}{
		{
			in: []int64{
				1351228575, // Fri Oct 26 05:16:15 UTC 2012 (Block #205000)
				1348310759, // Sat Sep 22 10:45:59 UTC 2012 (Block #200000)
				1305758502, // Wed May 18 22:41:42 UTC 2011 (Block #125000)
				1347777156, // Sun Sep 16 06:32:36 UTC 2012 (Block #199000)
				1349492104, // Sat Oct  6 02:55:04 UTC 2012 (Block #202000)
			},
			want: []int64{
				1305758502, // Wed May 18 22:41:42 UTC 2011 (Block #125000)
				1347777156, // Sun Sep 16 06:32:36 UTC 2012 (Block #199000)
				1348310759, // Sat Sep 22 10:45:59 UTC 2012 (Block #200000)
				1349492104, // Sat Oct  6 02:55:04 UTC 2012 (Block #202000)
				1351228575, // Fri Oct 26 05:16:15 UTC 2012 (Block #205000)
			},
		},
	}

	for i, test := range tests {
		result := make([]int64, len(test.in))
		copy(result, test.in)
		sort.Sort(blockchain.TstTimeSorter(result))
		if !reflect.DeepEqual(result, test.want) {
			t.Errorf("timeSorter #%d got %v want %v", i, result,
				test.want)
			continue
		}
	}
}
