package binary

import (
	"github.com/omniscale/imposm3/element"
	"sort"
	"testing"
)

func TestTagsAsAndFromArray(t *testing.T) {
	tags := element.Tags{"name": "foo", "highway": "residential", "oneway": "yes"}
	array := tagsAsArray(tags)

	if len(array) != 3 {
		t.Fatal("invalid length", array)
	}

	sort.Strings(array)
	for i, expected := range []string{
		"\x01foo",
		string(tagsToCodePoint["highway"]["residential"]),
		string(tagsToCodePoint["oneway"]["yes"]),
	} {
		if array[i] != expected {
			t.Fatal("invalid value", array, i, expected)
		}
	}

	tags = tagsFromArray(array)
	if len(tags) != 3 {
		t.Fatal("invalid length", tags)
	}
	if tags["name"] != "foo" || tags["highway"] != "residential" || tags["oneway"] != "yes" {
		t.Fatal("invalid tags", tags)
	}
}

func TestCodePoints(t *testing.T) {
	// codepoints should never change, so check a few for sanity
	if c := tagsToCodePoint["building"]["yes"]; c != codepoint('\ue000') {
		t.Fatalf("%x\n", c)
	}
	if c := tagsToCodePoint["surface"]["grass"]; c != codepoint('\ue052') {
		t.Fatalf("%x\n", c)
	}
	if c := tagsToCodePoint["type"]["associatedStreet"]; c != codepoint('\ue0a5') {
		t.Fatalf("%x\n", c)
	}
}
