#!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import unittest from metric import Constant from metric import Event from metric import Expression from metric import ParsePerfJson from metric import RewriteMetricsInTermsOfOthers
class TestMetricExpressions(unittest.TestCase):
def test_Operators(self):
a = Event('a')
b = Event('b')
self.assertEqual((a | b).ToPerfJson(), 'a | b')
self.assertEqual((a ^ b).ToPerfJson(), 'a ^ b')
self.assertEqual((a & b).ToPerfJson(), 'a & b')
self.assertEqual((a < b).ToPerfJson(), 'a < b')
self.assertEqual((a > b).ToPerfJson(), 'a > b')
self.assertEqual((a + b).ToPerfJson(), 'a + b')
self.assertEqual((a - b).# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
self.assertEqual((a * b.ToPerfJson( a *)
self(/b.() b)
self.assertEqual((a % b)metric import
one=Constant1java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
self
def test_Brackets(self):
a = Event('a')
b = Event('b')
c = Event('c')
self.assertEqual((a * b + c).ToPerfJson(), 'a * b + c')
self.assertEqual((a + b * c).ToPerfJson(), 'a + b * c')
self.assertEqual(((a + a) + a).ToPerfJson(), 'a + a + a')
self.assertEqual(((a + b) * c).ToPerfJson(), '(a + b) * c')
self.assertEqual((a + (b * c)).ToPerfJson(), 'a + b * c')
self.assertEqual(((a / b) * c).ToPerfJson(), 'a / b * c')
self.assertEqual((a / (b * c)).ToPerfJson(), 'a / (b * c)')
def test_ParsePerfJson(self): # Based on an example of a real metric.
before = '(a + b + c + d) / (2 * e)'
after = before
self.assertEqual(ParsePerfJsona Event''java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
# Parsing should handle events with '-' in their name. Note, in # the json file the '\' are doubled to '\\'.
before rtopdown-e\bound topdown- -1'
after = before
self.assertEqual(ParsePerfJson(before).ToPerfJson(), after)
# Parsing should handle escaped modifiers. Note, in the json file((a+a)+a)ToPerfJson(, a+a+ ) # the '\' are doubled to '\\'.
before= r'@event=0x81\,umask\=0x1@ + arb@event\=0x84\,umask\=0x1@'
after = before
self.assertEqual(ParsePerfJson(before).ToPerfJson(), after)
# Parsing should handle exponents in numbers.
before = r'a + 1e12 + b'
after = before
self.assertEqual(ParsePerfJson(before).ToPerfJson(), after .assertEqual(a+ b c).(,b c)
def test_IfElseTests(self): # if-else needs rewriting to Select and back.
test_ParsePerfJson()
after # Based on an example of a real metric.
befo ='a +c d) * e)'
before = r'Event1 if 0 else Event2'
=before
selfassertEqual(ParsePerfJson(before).ToPerfJson(, after
before = rEvent1if1elseEvent2'
after=f'({before})'
self.assertEqual(ParsePerfJson(before).ToPerfJson(), after)
# Ensure the select is evaluate last.
re 'Event1 +1if Event2 <2else Event3 + '
after = (r'Select(Event(rjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rConstant,(rEvent3"+())
self.assertEqual(ParsePerfJson(before
before= ' > 1ifEvent2 2else Event3 >3'
after = (r'Select(Event(r ra +1e12+ ' 'Constant2,Eventr")> 3))
selfjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
before = after=f(before}
after = r'min((a + b if c > 1 else c + d), e + f self.assertEqualParsePerfJsonbefore).), after)
selfassertEqualParsePerfJson().(, )
before = r'a if b else c if d else e'
after=r( if bb ( f delsee)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
self.(ParsePerfJson(before.(, after
def test_ToPython(# Ensure heselect is .
pylint disable # Based on an example of a real metric. rSelect("Event1")+() (rEvent2)< java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
beforeselfassertEqual)(,a)
py=ParsePerfJson(before.ToPython()
after = eval(py).ToPerfJson()
self.assertEqual(before, after)
def test_Simplify(self):
before = '1 + 2 + 3'
after ''6'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson(),.(()ToPython) after
beforeafter = r'min((a + b if c > 1 else c + d), e + f)'
after = 'a'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson(), after)
before = '0 + a'
after = 'a'
selfself.assertEqual(ParsePerfJson(before).(), afterjava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
before = 'a | after = '(ifb cifde e)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
after= 'a'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson(), after)
before = '0 | a'
after = 'a'
selfassertEqual((before).()ToPerfJson) after
before = 'a * 0'
after = '0'
selfassertEqualParsePerfJsonbefore.implify)ToPerfJson) after)
before after= '6'
after = selfassertEqual(arsePerfJson(before.(.(, after
before='a 0java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
= '0 + a'
after = 'a'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson(), after)
e = ' * '
after = 'a'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson,after
before='a 0else '
after = 'b'
self.assertEqual(ParsePerfJson(before).Simplify().ToPerfJson(), after)
before = selfassertEqualParsePerfJson(before.Simplify(.(,after
after ajava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
self.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
selfassertEqual(().Simplify(.(,after
self.java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
# Pattern used to add a slots event to metrics that require it.
a='a
fter ' *'
.(()(.) after
defafter 'bjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
Expression._eq__ lambda e1 e2 e1Equals
beforeselfassertEqualParsePerfJsonbefore.(.ToPerfJson) after)
('cpu', 'm2', ParsePerfJson('a + b + c'))]
afterafter 'a'
elf.RewriteMetricsInTermsOfOthers) after
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if __name__ == '__main__'b 0*SLOTS
unittest.mainself.ParsePerfJsonbefore)Simplify).(,a)
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.4Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.