yao/agent/search/citation_test.go
Max 6714ef9813 Refactor Citation Handling and Enhance Search Result Storage
- Updated the CitationGenerator to produce simple integer IDs instead of formatted strings, improving clarity and consistency in citation references.
- Enhanced the executeAutoSearch method to save both successful and failed search results, capturing detailed execution data for better traceability.
- Introduced a new SearchExecutionResult type to structure search result data, including query, keywords, configuration, duration, and error information.
- Updated related tests to reflect changes in citation ID format and ensure proper functionality of the new storage mechanisms.
- Revised documentation to clarify the new citation format and search result handling processes.
2025-12-15 17:17:51 +08:00

134 lines
2.4 KiB
Go

package search
import (
"sync"
"testing"
"github.com/stretchr/testify/assert"
)
func TestCitationGenerator_Next(t *testing.T) {
gen := NewCitationGenerator()
// First ID should be "1"
id1 := gen.Next()
assert.Equal(t, "1", id1)
// Second ID should be "2"
id2 := gen.Next()
assert.Equal(t, "2", id2)
// Third ID should be "3"
id3 := gen.Next()
assert.Equal(t, "3", id3)
}
func TestCitationGenerator_NextInt(t *testing.T) {
gen := NewCitationGenerator()
// First ID should be 1
id1 := gen.NextInt()
assert.Equal(t, 1, id1)
// Second ID should be 2
id2 := gen.NextInt()
assert.Equal(t, 2, id2)
}
func TestCitationGenerator_Current(t *testing.T) {
gen := NewCitationGenerator()
// Initial should be 0
assert.Equal(t, 0, gen.Current())
// After one Next, should be 1
gen.Next()
assert.Equal(t, 1, gen.Current())
// Current doesn't increment
assert.Equal(t, 1, gen.Current())
}
func TestCitationGenerator_Reset(t *testing.T) {
gen := NewCitationGenerator()
// Generate some IDs
gen.Next()
gen.Next()
gen.Next()
// Reset
gen.Reset()
// Next ID should be "1" again
id := gen.Next()
assert.Equal(t, "1", id)
}
func TestCitationGenerator_LargeNumbers(t *testing.T) {
gen := NewCitationGenerator()
// Generate 999 IDs
for i := 0; i < 999; i++ {
gen.Next()
}
// 1000th ID should be "1000"
id := gen.Next()
assert.Equal(t, "1000", id)
}
func TestCitationGenerator_Concurrent(t *testing.T) {
gen := NewCitationGenerator()
// Run 100 goroutines, each generating 10 IDs
var wg sync.WaitGroup
ids := make(chan string, 1000)
for i := 0; i < 100; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := 0; j < 10; j++ {
ids <- gen.Next()
}
}()
}
wg.Wait()
close(ids)
// Collect all IDs
idSet := make(map[string]bool)
for id := range ids {
idSet[id] = true
}
// All 1000 IDs should be unique
assert.Equal(t, 1000, len(idSet))
}
func TestNewCitationGenerator(t *testing.T) {
gen := NewCitationGenerator()
assert.NotNil(t, gen)
}
func TestUint64ToString(t *testing.T) {
tests := []struct {
input uint64
expected string
}{
{0, "0"},
{1, "1"},
{10, "10"},
{100, "100"},
{999, "999"},
{1000, "1000"},
{18446744073709551615, "18446744073709551615"}, // max uint64
}
for _, tt := range tests {
result := uint64ToString(tt.input)
assert.Equal(t, tt.expected, result, "uint64ToString(%d)", tt.input)
}
}