github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/app/router/weight_test.go (about) 1 package router_test 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/v2fly/v2ray-core/v5/app/router" 8 ) 9 10 func TestWeight(t *testing.T) { 11 manager := router.NewWeightManager( 12 []*router.StrategyWeight{ 13 { 14 Match: "x5", 15 Value: 100, 16 }, 17 { 18 Match: "x8", 19 }, 20 { 21 Regexp: true, 22 Match: `\bx0+(\.\d+)?\b`, 23 Value: 1, 24 }, 25 { 26 Regexp: true, 27 Match: `\bx\d+(\.\d+)?\b`, 28 }, 29 }, 30 1, func(v, w float64) float64 { 31 return v * w 32 }, 33 ) 34 tags := []string{ 35 "node name, x5, and more", 36 "node name, x8", 37 "node name, x15", 38 "node name, x0100, and more", 39 "node name, x10.1", 40 "node name, x00.1, and more", 41 } 42 // test weight 43 expected := []float64{100, 8, 15, 100, 10.1, 1} 44 actual := make([]float64, 0) 45 for _, tag := range tags { 46 actual = append(actual, manager.Get(tag)) 47 } 48 if !reflect.DeepEqual(expected, actual) { 49 t.Errorf("expected: %v, actual: %v", expected, actual) 50 } 51 // test scale 52 expected2 := []float64{1000, 80, 150, 1000, 101, 10} 53 actual2 := make([]float64, 0) 54 for _, tag := range tags { 55 actual2 = append(actual2, manager.Apply(tag, 10)) 56 } 57 if !reflect.DeepEqual(expected2, actual2) { 58 t.Errorf("expected2: %v, actual2: %v", expected2, actual2) 59 } 60 }