// Copyright 2015 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.

package precis

import (
	"testing"

	"golang.org/x/text/runes"
)

// Compile-time regression test to ensure that Class is a Set
var _ runes.Set = (*class)(nil)

// Ensure that certain characters are (or are not) in the identifier class.
func TestClassContains(t *testing.T) {
	tests := []struct {
		name       string
		class      *class
		allowed    []rune
		disallowed []rune
	}{
		{
			name:       "Identifier",
			class:      identifier,
			allowed:    []rune("Aa0\u0021\u007e\u00df\u3007"),
			disallowed: []rune("\u2150\u2100\u2200\u3164\u2190\u2600\u303b\u1e9b"),
		},
		{
			name:       "Freeform",
			class:      freeform,
			allowed:    []rune("Aa0\u0021\u007e\u00df\u3007 \u2150\u2100\u2200\u2190\u2600\u1e9b"),
			disallowed: []rune("\u3164\u303b"),
		},
	}

	for _, rt := range tests {
		for _, r := range rt.allowed {
			if !rt.class.Contains(r) {
				t.Errorf("Class %s should contain %U", rt.name, r)
			}
		}
		for _, r := range rt.disallowed {
			if rt.class.Contains(r) {
				t.Errorf("Class %s should not contain %U", rt.name, r)
			}
		}
	}
}
