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