72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
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)
|
||
}
|
||
})
|
||
}
|