@@ -76,7 +76,7 @@ func TestToString(t *testing.T) {
7676 }
7777}
7878
79- func TestAddCoreResources (t * testing.T ) {
79+ func TestAddInPlace (t * testing.T ) {
8080 type testCase struct {
8181 res corev1.ResourceList
8282 resToAdd corev1.ResourceList
@@ -108,7 +108,7 @@ func TestAddCoreResources(t *testing.T) {
108108 for _ , tc := range testCases {
109109 t .Run (ToString (tc .expected ), func (t * testing.T ) {
110110 res := tc .res .DeepCopy ()
111- AddCoreResources (res , tc .resToAdd )
111+ AddInPlace (res , tc .resToAdd )
112112 // comparing strings it just easier
113113 got := ToString (res )
114114 expected := ToString (tc .expected )
@@ -119,7 +119,7 @@ func TestAddCoreResources(t *testing.T) {
119119 }
120120}
121121
122- func TestSubCoreResources (t * testing.T ) {
122+ func TestSubInPlace (t * testing.T ) {
123123 type testCase struct {
124124 res corev1.ResourceList
125125 resToSub corev1.ResourceList
@@ -168,7 +168,7 @@ func TestSubCoreResources(t *testing.T) {
168168 for _ , tc := range testCases {
169169 t .Run (ToString (tc .expected ), func (t * testing.T ) {
170170 res := tc .res .DeepCopy ()
171- err := SubCoreResources (res , tc .resToSub )
171+ err := SubInPlace (res , tc .resToSub )
172172 if err != nil {
173173 t .Errorf ("Error while calculating resources: %s" , err .Error ())
174174 }
@@ -430,3 +430,171 @@ func TestAccumulate(t *testing.T) {
430430 })
431431 }
432432}
433+
434+ func TestHighest (t * testing.T ) {
435+ type testCase struct {
436+ name string
437+ ress []corev1.ResourceList
438+ expected corev1.ResourceList
439+ }
440+
441+ testCases := []testCase {
442+ {
443+ name : "empty" ,
444+ },
445+ {
446+ name : "one entry only" ,
447+ ress : []corev1.ResourceList {
448+ {
449+ corev1 .ResourceCPU : resource .MustParse ("1" ),
450+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
451+ },
452+ },
453+ expected : corev1.ResourceList {
454+ corev1 .ResourceCPU : resource .MustParse ("1" ),
455+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
456+ },
457+ },
458+ {
459+ name : "two identical entries" ,
460+ ress : []corev1.ResourceList {
461+ {
462+ corev1 .ResourceCPU : resource .MustParse ("2" ),
463+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
464+ },
465+ {
466+ corev1 .ResourceCPU : resource .MustParse ("2" ),
467+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
468+ },
469+ },
470+ expected : corev1.ResourceList {
471+ corev1 .ResourceCPU : resource .MustParse ("2" ),
472+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
473+ },
474+ },
475+ {
476+ name : "biggest everything" ,
477+ ress : []corev1.ResourceList {
478+ {
479+ corev1 .ResourceCPU : resource .MustParse ("2" ),
480+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
481+ },
482+ {
483+ corev1 .ResourceCPU : resource .MustParse ("5" ),
484+ corev1 .ResourceMemory : resource .MustParse ("11Gi" ),
485+ },
486+ },
487+ expected : corev1.ResourceList {
488+ corev1 .ResourceCPU : resource .MustParse ("5" ),
489+ corev1 .ResourceMemory : resource .MustParse ("11Gi" ),
490+ },
491+ },
492+ {
493+ name : "sparse peaks" ,
494+ ress : []corev1.ResourceList {
495+ {
496+ corev1 .ResourceCPU : resource .MustParse ("12" ),
497+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
498+ },
499+ {
500+ corev1 .ResourceCPU : resource .MustParse ("5" ),
501+ corev1 .ResourceMemory : resource .MustParse ("16Gi" ),
502+ },
503+ {
504+ corev1 .ResourceCPU : resource .MustParse ("8" ),
505+ corev1 .ResourceMemory : resource .MustParse ("8Gi" ),
506+ },
507+ },
508+ expected : corev1.ResourceList {
509+ corev1 .ResourceCPU : resource .MustParse ("12" ),
510+ corev1 .ResourceMemory : resource .MustParse ("16Gi" ),
511+ },
512+ },
513+ }
514+
515+ for _ , tc := range testCases {
516+ t .Run (tc .name , func (t * testing.T ) {
517+ got := Highest (tc .ress ... )
518+ if ! Equal (got , tc .expected ) {
519+ t .Errorf ("expected %v got %v" , tc .expected , got )
520+ }
521+ })
522+ }
523+ }
524+
525+ func TestScaleCoreResources (t * testing.T ) {
526+ type testCase struct {
527+ name string
528+ res corev1.ResourceList
529+ scaleNum int
530+ scaleDen int
531+ expected corev1.ResourceList
532+ }
533+
534+ testCases := []testCase {
535+ {
536+ name : "empty" ,
537+ },
538+ {
539+ name : "scale 1" ,
540+ res : corev1.ResourceList {
541+ corev1 .ResourceCPU : resource .MustParse ("1" ),
542+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
543+ },
544+ scaleNum : 1 ,
545+ scaleDen : 1 ,
546+ expected : corev1.ResourceList {
547+ corev1 .ResourceCPU : resource .MustParse ("1" ),
548+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
549+ },
550+ },
551+ {
552+ name : "scale 4" ,
553+ res : corev1.ResourceList {
554+ corev1 .ResourceCPU : resource .MustParse ("1" ),
555+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
556+ },
557+ scaleNum : 4 ,
558+ scaleDen : 1 ,
559+ expected : corev1.ResourceList {
560+ corev1 .ResourceCPU : resource .MustParse ("4" ),
561+ corev1 .ResourceMemory : resource .MustParse ("4Gi" ),
562+ },
563+ },
564+ {
565+ name : "scale 3/2" ,
566+ res : corev1.ResourceList {
567+ corev1 .ResourceCPU : resource .MustParse ("1" ),
568+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
569+ },
570+ scaleNum : 3 ,
571+ scaleDen : 2 ,
572+ expected : corev1.ResourceList {
573+ corev1 .ResourceCPU : resource .MustParse ("2" ),
574+ corev1 .ResourceMemory : resource .MustParse ("1610612736" ),
575+ },
576+ },
577+ {
578+ name : "scale 7/3" ,
579+ res : corev1.ResourceList {
580+ corev1 .ResourceCPU : resource .MustParse ("1" ),
581+ corev1 .ResourceMemory : resource .MustParse ("1Gi" ),
582+ },
583+ scaleNum : 7 ,
584+ scaleDen : 3 ,
585+ expected : corev1.ResourceList {
586+ corev1 .ResourceCPU : resource .MustParse ("3" ),
587+ corev1 .ResourceMemory : resource .MustParse ("2505398272" ),
588+ },
589+ },
590+ }
591+
592+ for _ , tc := range testCases {
593+ t .Run (tc .name , func (t * testing.T ) {
594+ got := ScaleCoreResources (tc .res , tc .scaleNum , tc .scaleDen )
595+ if ! Equal (got , tc .expected ) {
596+ t .Errorf ("expected %v got %v" , ToString (tc .expected ), ToString (got ))
597+ }
598+ })
599+ }
600+ }
0 commit comments