Created
April 23, 2019 18:44
-
-
Save dcbaker/8d8717515638fa939639613951e9c037 to your computer and use it in GitHub Desktop.
A benchmark script for meson's version comparison
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import timeit | |
import operator | |
from mesonbuild.mesonlib import Version | |
versions = [ | |
(Version(a), Version(b), o) for a, b, o in [ | |
# examples from https://fedoraproject.org/wiki/Archive:Tools/RPM/VersionComparison | |
("1.0010", "1.9", operator.gt), | |
("1.05", "1.5", operator.eq), | |
("1.0", "1", operator.gt), | |
("2.50", "2.5", operator.gt), | |
("fc4", "fc.4", operator.eq), | |
("FC5", "fc4", operator.lt), | |
("2a", "2.0", operator.lt), | |
("1.0", "1.fc4", operator.gt), | |
("3.0.0_fc", "3.0.0.fc", operator.eq), | |
# from RPM tests | |
("1.0", "1.0", operator.eq), | |
("1.0", "2.0", operator.lt), | |
("2.0", "1.0", operator.gt), | |
("2.0.1", "2.0.1", operator.eq), | |
("2.0", "2.0.1", operator.lt), | |
("2.0.1", "2.0", operator.gt), | |
("2.0.1a", "2.0.1a", operator.eq), | |
("2.0.1a", "2.0.1", operator.gt), | |
("2.0.1", "2.0.1a", operator.lt), | |
("5.5p1", "5.5p1", operator.eq), | |
("5.5p1", "5.5p2", operator.lt), | |
("5.5p2", "5.5p1", operator.gt), | |
("5.5p10", "5.5p10", operator.eq), | |
("5.5p1", "5.5p10", operator.lt), | |
("5.5p10", "5.5p1", operator.gt), | |
("10xyz", "10.1xyz", operator.lt), | |
("10.1xyz", "10xyz", operator.gt), | |
("xyz10", "xyz10", operator.eq), | |
("xyz10", "xyz10.1", operator.lt), | |
("xyz10.1", "xyz10", operator.gt), | |
("xyz.4", "xyz.4", operator.eq), | |
("xyz.4", "8", operator.lt), | |
("8", "xyz.4", operator.gt), | |
("xyz.4", "2", operator.lt), | |
("2", "xyz.4", operator.gt), | |
("5.5p2", "5.6p1", operator.lt), | |
("5.6p1", "5.5p2", operator.gt), | |
("5.6p1", "6.5p1", operator.lt), | |
("6.5p1", "5.6p1", operator.gt), | |
("6.0.rc1", "6.0", operator.gt), | |
("6.0", "6.0.rc1", operator.lt), | |
("10b2", "10a1", operator.gt), | |
("10a2", "10b2", operator.lt), | |
("1.0aa", "1.0aa", operator.eq), | |
("1.0a", "1.0aa", operator.lt), | |
("1.0aa", "1.0a", operator.gt), | |
("10.0001", "10.0001", operator.eq), | |
("10.0001", "10.1", operator.eq), | |
("10.1", "10.0001", operator.eq), | |
("10.0001", "10.0039", operator.lt), | |
("10.0039", "10.0001", operator.gt), | |
("4.999.9", "5.0", operator.lt), | |
("5.0", "4.999.9", operator.gt), | |
("20101121", "20101121", operator.eq), | |
("20101121", "20101122", operator.lt), | |
("20101122", "20101121", operator.gt), | |
("2_0", "2_0", operator.eq), | |
("2.0", "2_0", operator.eq), | |
("2_0", "2.0", operator.eq), | |
("a", "a", operator.eq), | |
("a+", "a+", operator.eq), | |
("a+", "a_", operator.eq), | |
("a_", "a+", operator.eq), | |
("+a", "+a", operator.eq), | |
("+a", "_a", operator.eq), | |
("_a", "+a", operator.eq), | |
("+_", "+_", operator.eq), | |
("_+", "+_", operator.eq), | |
("_+", "_+", operator.eq), | |
("+", "_", operator.eq), | |
("_", "+", operator.eq), | |
# other tests | |
('0.99.beta19', '0.99.beta14', operator.gt), | |
("1.0.0", "2.0.0", operator.lt), | |
(".0.0", "2.0.0", operator.lt), | |
("alpha", "beta", operator.lt), | |
("1.0", "1.0.0", operator.lt), | |
("2.456", "2.1000", operator.lt), | |
("2.1000", "3.111", operator.lt), | |
("2.001", "2.1", operator.eq), | |
("2.34", "2.34", operator.eq), | |
("6.1.2", "6.3.8", operator.lt), | |
("1.7.3.0", "2.0.0", operator.lt), | |
("2.24.51", "2.25", operator.lt), | |
("2.1.5+20120813+gitdcbe778", "2.1.5", operator.gt), | |
("3.4.1", "3.4b1", operator.gt), | |
("041206", "200090325", operator.lt), | |
("0.6.2+git20130413", "0.6.2", operator.gt), | |
("2.6.0+bzr6602", "2.6.0", operator.gt), | |
("2.6.0", "2.6b2", operator.gt), | |
("2.6.0+bzr6602", "2.6b2x", operator.gt), | |
("0.6.7+20150214+git3a710f9", "0.6.7", operator.gt), | |
("15.8b", "15.8.0.1", operator.lt), | |
("1.2rc1", "1.2.0", operator.lt), | |
] | |
] | |
def func(): | |
for ver_a, ver_b, op in versions: | |
if op is operator.eq: | |
for o, name in [(op, 'eq'), (operator.ge, 'ge'), (operator.le, 'le')]: | |
assert o(ver_a, ver_b) | |
if op is operator.lt: | |
for o, name in [(op, 'lt'), (operator.le, 'le'), (operator.ne, 'ne')]: | |
assert o(ver_a, ver_b) | |
for o, name in [(operator.gt, 'gt'), (operator.ge, 'ge'), (operator.eq, 'eq')]: | |
assert not o(ver_a, ver_b) | |
if op is operator.gt: | |
for o, name in [(op, 'gt'), (operator.ge, 'ge'), (operator.ne, 'ne')]: | |
assert o(ver_a, ver_b) | |
for o, name in [(operator.lt, 'lt'), (operator.le, 'le'), (operator.eq, 'eq')]: | |
assert not o(ver_a, ver_b) | |
print(timeit.timeit(func, number=10000)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment