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

package uniqueid

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"testing"
)

func TestNewID(t *testing.T) {
	g := RandomGenerator{}
	numHitMaxCount := 2
	maxCount := 0x7fff
	firstRandomValue := []byte{}
	var atLeastOneDiffersFromFirst bool
	for i := 0; i < numHitMaxCount*maxCount; i++ {
		id, err := g.NewID()
		if err != nil {
			t.Fatal("Error generating new id: ", err)
		}

		if firstRandomValue == nil {
			firstRandomValue = id[:14]
		}
		if !bytes.Equal(firstRandomValue, []byte(id[:14])) {
			atLeastOneDiffersFromFirst = true
		}

		if id[14]&0x80 != 0x80 {
			t.Errorf("Expected high bit to be 1, but containing byte was: %x", id[14])
		}
		if binary.BigEndian.Uint16(id[14:])&0x7fff != uint16(i)&0x7fff {
			t.Errorf("Counts don't match. Got: %d, Expected: %d", binary.BigEndian.Uint16(id[14:])&0x7fff, i&0x7fff)
		}
	}
	if !atLeastOneDiffersFromFirst {
		t.Errorf("Expected at least two of the randomly generated numbers to be different")
	}
}

func TestString(t *testing.T) {
	id := Id{8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7}
	if got, want := fmt.Sprintf("%v", id), "0x08090a0b0c0d0e0f0001020304050607"; got != want {
		t.Errorf("Got %q, want %q", got, want)
	}
}

func BenchmarkNewIDParallel(b *testing.B) {
	g := RandomGenerator{}
	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			g.NewID()
		}
	})
}
