gomog/internal/engine/fuzz_test.go

72 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package engine
import (
"testing"
)
// FuzzTypeConversion_ToString fuzz 测试 $toString
func FuzzTypeConversion_ToString(f *testing.F) {
engine := &AggregationEngine{}
// 添加初始语料库
f.Add(float64(123))
f.Add(float64(-456))
f.Add(float64(0))
f.Add(float64(3.14159))
f.Fuzz(func(t *testing.T, value float64) {
data := map[string]interface{}{"value": value}
result := engine.toString("$value", data)
// 验证返回非空字符串(除了 0
if result == "" && value != 0 {
t.Errorf("toString(%v) returned empty string", value)
}
})
}
// FuzzTypeConversion_ToInt fuzz 测试 $toInt
func FuzzTypeConversion_ToInt(f *testing.F) {
engine := &AggregationEngine{}
f.Add(float64(123))
f.Add(float64(-456))
f.Add(float64(0))
f.Add(float64(99.99))
f.Fuzz(func(t *testing.T, value float64) {
data := map[string]interface{}{"value": value}
result := engine.toInt("$value", data)
// 验证转换在合理范围内
expected := int32(value)
if result != expected {
t.Errorf("toInt(%v) = %d, want %d", value, result, expected)
}
})
}
// FuzzBitwiseOps_BitAnd fuzz 测试位运算 AND
func FuzzBitwiseOps_BitAnd(f *testing.F) {
engine := &AggregationEngine{}
f.Add(float64(12345), float64(67890))
f.Add(float64(0), float64(255))
f.Add(float64(-1), float64(1))
f.Fuzz(func(t *testing.T, a, b float64) {
operand := []interface{}{a, b}
data := map[string]interface{}{}
result := engine.bitAnd(operand, data)
// 验证结果合理性(位运算结果应在操作数范围内)
maxVal := a
if b > maxVal {
maxVal = b
}
if result > int64(maxVal) && maxVal > 0 {
t.Errorf("bitAnd(%v, %v) = %v exceeds max operand", a, b, result)
}
})
}