github.com/mithrandie/csvq@v1.18.1/lib/query/goroutine_manager_test.go (about) 1 package query 2 3 import ( 4 "testing" 5 ) 6 7 var goroutineManagerAssignRoutineNumberTests = []struct { 8 Name string 9 PresetCPU int 10 DefaultMinimumRequiredPerCore int 11 PresetCount int 12 RecordLen int 13 MinimumRequired int 14 Expect int 15 ExpectCount int 16 }{ 17 { 18 Name: "First Assign", 19 PresetCPU: 4, 20 DefaultMinimumRequiredPerCore: 40, 21 PresetCount: 0, 22 RecordLen: 10000, 23 MinimumRequired: -1, 24 Expect: 4, 25 ExpectCount: 3, 26 }, 27 { 28 Name: "Already Assigned", 29 PresetCPU: 4, 30 DefaultMinimumRequiredPerCore: 40, 31 PresetCount: 4, 32 RecordLen: 10000, 33 MinimumRequired: -1, 34 Expect: 1, 35 ExpectCount: 4, 36 }, 37 { 38 Name: "Use One CPU Core", 39 PresetCPU: 4, 40 DefaultMinimumRequiredPerCore: 40, 41 PresetCount: 0, 42 RecordLen: 10, 43 MinimumRequired: -1, 44 Expect: 1, 45 ExpectCount: 0, 46 }, 47 { 48 Name: "Use Two CPU Cores", 49 PresetCPU: 4, 50 DefaultMinimumRequiredPerCore: 40, 51 PresetCount: 0, 52 RecordLen: 90, 53 MinimumRequired: -1, 54 Expect: 2, 55 ExpectCount: 1, 56 }, 57 } 58 59 func TestGoroutineManager_AssignRoutineNumber(t *testing.T) { 60 gm := GetGoroutineManager() 61 62 for _, v := range goroutineManagerAssignRoutineNumberTests { 63 gm.Count = v.PresetCount 64 gm.MinimumRequiredPerCore = v.DefaultMinimumRequiredPerCore 65 66 result := gm.AssignRoutineNumber(v.RecordLen, v.MinimumRequired, v.PresetCPU) 67 if result != v.Expect { 68 t.Errorf("%s: result = %d, want %d", v.Name, result, v.Expect) 69 } 70 if gm.Count != v.ExpectCount { 71 t.Errorf("%s: count = %d, want %d", v.Name, gm.Count, v.ExpectCount) 72 } 73 } 74 75 gm.Count = 0 76 gm.MinimumRequiredPerCore = MinimumRequiredPerCPUCore 77 } 78 79 var goroutineTaskManagerRecordRangeTests = []struct { 80 Name string 81 NumberOfRoutine int 82 LecordLen int 83 RoutineIndex int 84 ExpectStart int 85 ExpectEnd int 86 }{ 87 { 88 Name: "First Routine", 89 NumberOfRoutine: 4, 90 LecordLen: 999, 91 RoutineIndex: 0, 92 ExpectStart: 0, 93 ExpectEnd: 249, 94 }, 95 { 96 Name: "Second Routine", 97 NumberOfRoutine: 4, 98 LecordLen: 999, 99 RoutineIndex: 1, 100 ExpectStart: 249, 101 ExpectEnd: 498, 102 }, 103 { 104 Name: "Third Routine", 105 NumberOfRoutine: 4, 106 LecordLen: 999, 107 RoutineIndex: 2, 108 ExpectStart: 498, 109 ExpectEnd: 747, 110 }, 111 { 112 Name: "Fourth Routine", 113 NumberOfRoutine: 4, 114 LecordLen: 999, 115 RoutineIndex: 3, 116 ExpectStart: 747, 117 ExpectEnd: 999, 118 }, 119 { 120 Name: "Fifth Routine", 121 NumberOfRoutine: 4, 122 LecordLen: 999, 123 RoutineIndex: 5, 124 ExpectStart: 0, 125 ExpectEnd: 0, 126 }, 127 } 128 129 func TestGoroutineTaskManager_RecordRange(t *testing.T) { 130 gtm := &GoroutineTaskManager{} 131 132 for _, v := range goroutineTaskManagerRecordRangeTests { 133 gtm.Number = v.NumberOfRoutine 134 gtm.recordLen = v.LecordLen 135 136 start, end := gtm.RecordRange(v.RoutineIndex) 137 if start != v.ExpectStart || end != v.ExpectEnd { 138 t.Errorf("%s: result = %d, %d, want %d, %d", v.Name, start, end, v.ExpectStart, v.ExpectEnd) 139 } 140 } 141 }