// Copyright 2016 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 syncbase_test

import (
	"regexp"
	"sort"
	"testing"

	"v.io/v23/syncbase"
)

const (
	uuidLoopIncovations int = 100
)

func TestUUIDFormat(t *testing.T) {
	uuid := syncbase.UUID()
	regexp := regexp.MustCompile("^v[\\$0-9A-Za-z_]{19}$")
	if !regexp.MatchString(uuid) {
		t.Error("Incorrect UUID format")
	}
}

func TestUUIDCollisions(t *testing.T) {
	uuidChannel := make(chan string)

	createUUID := func() {
		uuidChannel <- syncbase.UUID()
	}

	for i := 0; i < uuidLoopIncovations; i++ {
		go createUUID()
	}

	uuidMap := make(map[string]bool)

	for i := 0; i < uuidLoopIncovations; i++ {
		uuidMap[<-uuidChannel] = true
	}

	if len(uuidMap) != uuidLoopIncovations {
		t.Errorf("UUID collision for %d UUIDs", uuidLoopIncovations-len(uuidMap))
	}
}

func TestUUIDSequential(t *testing.T) {
	unsorted := make([]string, 100)
	sorted := make([]string, 100)

	for i := 0; i < uuidLoopIncovations; i++ {
		uuid := syncbase.UUID()
		unsorted[i] = uuid
		sorted[i] = uuid
	}

	sort.Strings(sorted)

	for i := 0; i < uuidLoopIncovations; i++ {
		if unsorted[i] != sorted[i] {
			t.Errorf("UUID not sorted at position %d", i)
		}
	}
}
