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  }