...

Source file src/github.com/onsi/gomega/gmeasure/rank_test.go

Documentation: github.com/onsi/gomega/gmeasure

     1  package gmeasure_test
     2  
     3  import (
     4  	"strings"
     5  	"time"
     6  
     7  	. "github.com/onsi/ginkgo/v2"
     8  	. "github.com/onsi/gomega"
     9  	"github.com/onsi/gomega/gmeasure"
    10  )
    11  
    12  var _ = Describe("Rank", func() {
    13  	var A, B, C, D gmeasure.Stats
    14  
    15  	Describe("Ranking Values", func() {
    16  		makeStats := func(name string, min float64, max float64, mean float64, median float64) gmeasure.Stats {
    17  			return gmeasure.Stats{
    18  				Type:            gmeasure.StatsTypeValue,
    19  				ExperimentName:  "Exp-" + name,
    20  				MeasurementName: name,
    21  				N:               100,
    22  				PrecisionBundle: gmeasure.Precision(2),
    23  				ValueBundle: map[gmeasure.Stat]float64{
    24  					gmeasure.StatMin:    min,
    25  					gmeasure.StatMax:    max,
    26  					gmeasure.StatMean:   mean,
    27  					gmeasure.StatMedian: median,
    28  					gmeasure.StatStdDev: 2.0,
    29  				},
    30  			}
    31  		}
    32  
    33  		BeforeEach(func() {
    34  			A = makeStats("A", 1, 2, 3, 4)
    35  			B = makeStats("B", 2, 3, 4, 1)
    36  			C = makeStats("C", 3, 4, 1, 2)
    37  			D = makeStats("D", 4, 1, 2, 3)
    38  		})
    39  
    40  		DescribeTable("ranking by criteria",
    41  			func(criteria gmeasure.RankingCriteria, expectedOrder func() []gmeasure.Stats) {
    42  				ranking := gmeasure.RankStats(criteria, A, B, C, D)
    43  				expected := expectedOrder()
    44  				Ω(ranking.Winner()).Should(Equal(expected[0]))
    45  				Ω(ranking.Stats).Should(Equal(expected))
    46  			},
    47  			Entry("entry", gmeasure.LowerMeanIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{C, D, A, B} }),
    48  			Entry("entry", gmeasure.HigherMeanIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{B, A, D, C} }),
    49  			Entry("entry", gmeasure.LowerMedianIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{B, C, D, A} }),
    50  			Entry("entry", gmeasure.HigherMedianIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{A, D, C, B} }),
    51  			Entry("entry", gmeasure.LowerMinIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{A, B, C, D} }),
    52  			Entry("entry", gmeasure.HigherMinIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{D, C, B, A} }),
    53  			Entry("entry", gmeasure.LowerMaxIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{D, A, B, C} }),
    54  			Entry("entry", gmeasure.HigherMaxIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{C, B, A, D} }),
    55  		)
    56  
    57  		Describe("Generating Reports", func() {
    58  			It("can generate an unstyled report", func() {
    59  				ranking := gmeasure.RankStats(gmeasure.LowerMeanIsBetter, A, B, C, D)
    60  				Ω(ranking.String()).Should(Equal(strings.Join([]string{
    61  					"Ranking Criteria: Lower Mean is Better",
    62  					"Experiment | Name     | N   | Min  | Median | Mean | StdDev | Max ",
    63  					"==================================================================",
    64  					"Exp-C      | C        | 100 | 3.00 | 2.00   | 1.00 | 2.00   | 4.00",
    65  					"*Winner*   | *Winner* |     |      |        |      |        |     ",
    66  					"------------------------------------------------------------------",
    67  					"Exp-D      | D        | 100 | 4.00 | 3.00   | 2.00 | 2.00   | 1.00",
    68  					"------------------------------------------------------------------",
    69  					"Exp-A      | A        | 100 | 1.00 | 4.00   | 3.00 | 2.00   | 2.00",
    70  					"------------------------------------------------------------------",
    71  					"Exp-B      | B        | 100 | 2.00 | 1.00   | 4.00 | 2.00   | 3.00",
    72  					"",
    73  				}, "\n")))
    74  			})
    75  
    76  			It("can generate a styled report", func() {
    77  				ranking := gmeasure.RankStats(gmeasure.LowerMeanIsBetter, A, B, C, D)
    78  				Ω(ranking.ColorableString()).Should(Equal(strings.Join([]string{
    79  					"{{bold}}Ranking Criteria: Lower Mean is Better",
    80  					"{{/}}{{bold}}Experiment{{/}} | {{bold}}Name    {{/}} | {{bold}}N  {{/}} | {{bold}}Min {{/}} | {{bold}}Median{{/}} | {{bold}}Mean{{/}} | {{bold}}StdDev{{/}} | {{bold}}Max {{/}}",
    81  					"==================================================================",
    82  					"{{bold}}Exp-C     {{/}} | {{bold}}C       {{/}} | {{bold}}100{{/}} | {{bold}}3.00{{/}} | {{bold}}2.00  {{/}} | {{bold}}1.00{{/}} | {{bold}}2.00  {{/}} | {{bold}}4.00{{/}}",
    83  					"{{bold}}*Winner*  {{/}} | {{bold}}*Winner*{{/}} |     |      |        |      |        |     ",
    84  					"------------------------------------------------------------------",
    85  					"Exp-D      | D        | 100 | 4.00 | 3.00   | 2.00 | 2.00   | 1.00",
    86  					"------------------------------------------------------------------",
    87  					"Exp-A      | A        | 100 | 1.00 | 4.00   | 3.00 | 2.00   | 2.00",
    88  					"------------------------------------------------------------------",
    89  					"Exp-B      | B        | 100 | 2.00 | 1.00   | 4.00 | 2.00   | 3.00",
    90  					"",
    91  				}, "\n")))
    92  			})
    93  		})
    94  	})
    95  
    96  	Describe("Ranking Durations", func() {
    97  		makeStats := func(name string, min time.Duration, max time.Duration, mean time.Duration, median time.Duration) gmeasure.Stats {
    98  			return gmeasure.Stats{
    99  				Type:            gmeasure.StatsTypeDuration,
   100  				ExperimentName:  "Exp-" + name,
   101  				MeasurementName: name,
   102  				N:               100,
   103  				PrecisionBundle: gmeasure.Precision(time.Millisecond * 100),
   104  				DurationBundle: map[gmeasure.Stat]time.Duration{
   105  					gmeasure.StatMin:    min,
   106  					gmeasure.StatMax:    max,
   107  					gmeasure.StatMean:   mean,
   108  					gmeasure.StatMedian: median,
   109  					gmeasure.StatStdDev: 2.0,
   110  				},
   111  			}
   112  		}
   113  
   114  		BeforeEach(func() {
   115  			A = makeStats("A", 1*time.Second, 2*time.Second, 3*time.Second, 4*time.Second)
   116  			B = makeStats("B", 2*time.Second, 3*time.Second, 4*time.Second, 1*time.Second)
   117  			C = makeStats("C", 3*time.Second, 4*time.Second, 1*time.Second, 2*time.Second)
   118  			D = makeStats("D", 4*time.Second, 1*time.Second, 2*time.Second, 3*time.Second)
   119  		})
   120  
   121  		DescribeTable("ranking by criteria",
   122  			func(criteria gmeasure.RankingCriteria, expectedOrder func() []gmeasure.Stats) {
   123  				ranking := gmeasure.RankStats(criteria, A, B, C, D)
   124  				expected := expectedOrder()
   125  				Ω(ranking.Winner()).Should(Equal(expected[0]))
   126  				Ω(ranking.Stats).Should(Equal(expected))
   127  			},
   128  			Entry("entry", gmeasure.LowerMeanIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{C, D, A, B} }),
   129  			Entry("entry", gmeasure.HigherMeanIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{B, A, D, C} }),
   130  			Entry("entry", gmeasure.LowerMedianIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{B, C, D, A} }),
   131  			Entry("entry", gmeasure.HigherMedianIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{A, D, C, B} }),
   132  			Entry("entry", gmeasure.LowerMinIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{A, B, C, D} }),
   133  			Entry("entry", gmeasure.HigherMinIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{D, C, B, A} }),
   134  			Entry("entry", gmeasure.LowerMaxIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{D, A, B, C} }),
   135  			Entry("entry", gmeasure.HigherMaxIsBetter, func() []gmeasure.Stats { return []gmeasure.Stats{C, B, A, D} }),
   136  		)
   137  
   138  		Describe("Generating Reports", func() {
   139  			It("can generate an unstyled report", func() {
   140  				ranking := gmeasure.RankStats(gmeasure.LowerMeanIsBetter, A, B, C, D)
   141  				Ω(ranking.String()).Should(Equal(strings.Join([]string{
   142  					"Ranking Criteria: Lower Mean is Better",
   143  					"Experiment | Name     | N   | Min | Median | Mean | StdDev | Max",
   144  					"================================================================",
   145  					"Exp-C      | C        | 100 | 3s  | 2s     | 1s   | 0s     | 4s ",
   146  					"*Winner*   | *Winner* |     |     |        |      |        |    ",
   147  					"----------------------------------------------------------------",
   148  					"Exp-D      | D        | 100 | 4s  | 3s     | 2s   | 0s     | 1s ",
   149  					"----------------------------------------------------------------",
   150  					"Exp-A      | A        | 100 | 1s  | 4s     | 3s   | 0s     | 2s ",
   151  					"----------------------------------------------------------------",
   152  					"Exp-B      | B        | 100 | 2s  | 1s     | 4s   | 0s     | 3s ",
   153  					"",
   154  				}, "\n")))
   155  			})
   156  
   157  			It("can generate a styled report", func() {
   158  				ranking := gmeasure.RankStats(gmeasure.LowerMeanIsBetter, A, B, C, D)
   159  				Ω(ranking.ColorableString()).Should(Equal(strings.Join([]string{
   160  					"{{bold}}Ranking Criteria: Lower Mean is Better",
   161  					"{{/}}{{bold}}Experiment{{/}} | {{bold}}Name    {{/}} | {{bold}}N  {{/}} | {{bold}}Min{{/}} | {{bold}}Median{{/}} | {{bold}}Mean{{/}} | {{bold}}StdDev{{/}} | {{bold}}Max{{/}}",
   162  					"================================================================",
   163  					"{{bold}}Exp-C     {{/}} | {{bold}}C       {{/}} | {{bold}}100{{/}} | {{bold}}3s {{/}} | {{bold}}2s    {{/}} | {{bold}}1s  {{/}} | {{bold}}0s    {{/}} | {{bold}}4s {{/}}",
   164  					"{{bold}}*Winner*  {{/}} | {{bold}}*Winner*{{/}} |     |     |        |      |        |    ",
   165  					"----------------------------------------------------------------",
   166  					"Exp-D      | D        | 100 | 4s  | 3s     | 2s   | 0s     | 1s ",
   167  					"----------------------------------------------------------------",
   168  					"Exp-A      | A        | 100 | 1s  | 4s     | 3s   | 0s     | 2s ",
   169  					"----------------------------------------------------------------",
   170  					"Exp-B      | B        | 100 | 2s  | 1s     | 4s   | 0s     | 3s ",
   171  					"",
   172  				}, "\n")))
   173  			})
   174  		})
   175  	})
   176  
   177  })
   178  

View as plain text