• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2022 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7from crossbench.benchmarks.jetstream.jetstream import JetStreamCSVFormatter
8from crossbench.benchmarks.jetstream.jetstream_2_0 import (JetStream20Benchmark,
9                                                           JetStream20Probe,
10                                                           JetStream20Story)
11from crossbench.benchmarks.jetstream.jetstream_2_1 import (JetStream21Benchmark,
12                                                           JetStream21Probe,
13                                                           JetStream21Story)
14from crossbench.benchmarks.jetstream.jetstream_2_2 import (JetStream22Benchmark,
15                                                           JetStream22Probe,
16                                                           JetStream22Story)
17from crossbench.benchmarks.jetstream.jetstream_3_0 import (JetStream30Benchmark,
18                                                           JetStream30Probe,
19                                                           JetStream30Story)
20from crossbench.probes.metric import MetricsMerger
21from tests import test_helper
22# Only import module to avoid exposing the abstract test classes to the runner.
23from tests.crossbench.benchmarks import jetstream_helper
24
25
26class JetStreamCSVFormatterTestCase(unittest.TestCase):
27
28  def test_format_sorted(self):
29    metrics = MetricsMerger({
30        "Total/average": 10,
31        "Total/score": 20,
32        "cdjs/average": 30,
33        "cdjs/score": 40,
34    })
35    table = JetStreamCSVFormatter(metrics, lambda metric: metric.geomean).table
36    self.assertSequenceEqual(table, [
37        ("Total/score", "Total", "score", 20.0),
38        ("cdjs/score", "cdjs", "score", 40.0),
39        ("Total/average", "Total", "average", 10.0),
40        ("Total/score", "Total", "score", 20.0),
41        ("cdjs/average", "cdjs", "average", 30.0),
42        ("cdjs/score", "cdjs", "score", 40.0),
43    ])
44
45  def test_format_unsorted(self):
46    metrics = MetricsMerger({
47        "cdjs/average": 30,
48        "cdjs/score": 40,
49        "Total/average": 10,
50        "Total/score": 20,
51    })
52    table = JetStreamCSVFormatter(
53        metrics, lambda metric: metric.geomean, sort=False).table
54    self.assertSequenceEqual(table, [
55        ("Total/score", "Total", "score", 20.0),
56        ("cdjs/score", "cdjs", "score", 40.0),
57        ("cdjs/average", "cdjs", "average", 30.0),
58        ("cdjs/score", "cdjs", "score", 40.0),
59        ("Total/average", "Total", "average", 10.0),
60        ("Total/score", "Total", "score", 20.0),
61    ])
62
63
64class JetStream20TestCase(jetstream_helper.JetStream2BaseTestCase):
65
66  @property
67  def benchmark_cls(self):
68    return JetStream20Benchmark
69
70  @property
71  def story_cls(self):
72    return JetStream20Story
73
74  @property
75  def probe_cls(self):
76    return JetStream20Probe
77
78  @property
79  def name(self):
80    return "jetstream_2.0"
81
82
83class JetStream21TestCase(jetstream_helper.JetStream2BaseTestCase):
84
85  @property
86  def benchmark_cls(self):
87    return JetStream21Benchmark
88
89  @property
90  def story_cls(self):
91    return JetStream21Story
92
93  @property
94  def probe_cls(self):
95    return JetStream21Probe
96
97  @property
98  def name(self):
99    return "jetstream_2.1"
100
101
102class JetStream22TestCase(jetstream_helper.JetStream2BaseTestCase):
103
104  @property
105  def benchmark_cls(self):
106    return JetStream22Benchmark
107
108  @property
109  def story_cls(self):
110    return JetStream22Story
111
112  @property
113  def probe_cls(self):
114    return JetStream22Probe
115
116  @property
117  def name(self):
118    return "jetstream_2.2"
119
120
121class JetStream30TestCase(jetstream_helper.JetStream3BaseTestCase):
122
123  @property
124  def benchmark_cls(self):
125    return JetStream30Benchmark
126
127  @property
128  def story_cls(self):
129    return JetStream30Story
130
131  @property
132  def probe_cls(self):
133    return JetStream30Probe
134
135  @property
136  def name(self):
137    return "jetstream_3.0"
138
139
140if __name__ == "__main__":
141  test_helper.run_pytest(__file__)
142