github.com/vugu/vugu@v0.3.6-0.20240430171613-3f6f402e014b/internal/htmlx/atom/atom_test.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package atom
     6  
     7  import (
     8  	"sort"
     9  	"testing"
    10  )
    11  
    12  func TestKnown(t *testing.T) {
    13  	for _, s := range testAtomList {
    14  		if atom := Lookup([]byte(s)); atom.String() != s {
    15  			t.Errorf("Lookup(%q) = %#x (%q)", s, uint32(atom), atom.String())
    16  		}
    17  	}
    18  }
    19  
    20  func TestHits(t *testing.T) {
    21  	for _, a := range table {
    22  		if a == 0 {
    23  			continue
    24  		}
    25  		got := Lookup([]byte(a.String()))
    26  		if got != a {
    27  			t.Errorf("Lookup(%q) = %#x, want %#x", a.String(), uint32(got), uint32(a))
    28  		}
    29  	}
    30  }
    31  
    32  func TestMisses(t *testing.T) {
    33  	testCases := []string{
    34  		"",
    35  		"\x00",
    36  		"\xff",
    37  		"A",
    38  		"DIV",
    39  		"Div",
    40  		"dIV",
    41  		"aa",
    42  		"a\x00",
    43  		"ab",
    44  		"abb",
    45  		"abbr0",
    46  		"abbr ",
    47  		" abbr",
    48  		" a",
    49  		"acceptcharset",
    50  		"acceptCharset",
    51  		"accept_charset",
    52  		"h0",
    53  		"h1h2",
    54  		"h7",
    55  		"onClick",
    56  		"λ",
    57  		// The following string has the same hash (0xa1d7fab7) as "onmouseover".
    58  		"\x00\x00\x00\x00\x00\x50\x18\xae\x38\xd0\xb7",
    59  	}
    60  	for _, tc := range testCases {
    61  		got := Lookup([]byte(tc))
    62  		if got != 0 {
    63  			t.Errorf("Lookup(%q): got %d, want 0", tc, got)
    64  		}
    65  	}
    66  }
    67  
    68  func TestForeignObject(t *testing.T) {
    69  	const (
    70  		afo = Foreignobject
    71  		afO = ForeignObject
    72  		sfo = "foreignobject"
    73  		sfO = "foreignObject"
    74  	)
    75  	if got := Lookup([]byte(sfo)); got != afo {
    76  		t.Errorf("Lookup(%q): got %#v, want %#v", sfo, got, afo)
    77  	}
    78  	if got := Lookup([]byte(sfO)); got != afO {
    79  		t.Errorf("Lookup(%q): got %#v, want %#v", sfO, got, afO)
    80  	}
    81  	if got := afo.String(); got != sfo {
    82  		t.Errorf("Atom(%#v).String(): got %q, want %q", afo, got, sfo)
    83  	}
    84  	if got := afO.String(); got != sfO {
    85  		t.Errorf("Atom(%#v).String(): got %q, want %q", afO, got, sfO)
    86  	}
    87  }
    88  
    89  func BenchmarkLookup(b *testing.B) {
    90  	sortedTable := make([]string, 0, len(table))
    91  	for _, a := range table {
    92  		if a != 0 {
    93  			sortedTable = append(sortedTable, a.String())
    94  		}
    95  	}
    96  	sort.Strings(sortedTable)
    97  
    98  	x := make([][]byte, 1000)
    99  	for i := range x {
   100  		x[i] = []byte(sortedTable[i%len(sortedTable)])
   101  	}
   102  
   103  	b.ResetTimer()
   104  	for i := 0; i < b.N; i++ {
   105  		for _, s := range x {
   106  			Lookup(s)
   107  		}
   108  	}
   109  }