168 lines
4.0 KiB
Python
168 lines
4.0 KiB
Python
# Benchmarks of Starlark execution
|
|
# option:set
|
|
|
|
def bench_range_construction(b):
|
|
for _ in range(b.n):
|
|
range(200)
|
|
|
|
def bench_range_iteration(b):
|
|
for _ in range(b.n):
|
|
for x in range(200):
|
|
pass
|
|
|
|
# Make a 2-level call tree of 100 * 100 calls.
|
|
def bench_calling(b):
|
|
list = range(100)
|
|
|
|
def g():
|
|
for x in list:
|
|
pass
|
|
|
|
def f():
|
|
for x in list:
|
|
g()
|
|
|
|
for _ in range(b.n):
|
|
f()
|
|
|
|
# Measure overhead of calling a trivial built-in method.
|
|
emptydict = {}
|
|
range1000 = range(1000)
|
|
|
|
def bench_builtin_method(b):
|
|
for _ in range(b.n):
|
|
for _ in range1000:
|
|
emptydict.get(None)
|
|
|
|
def bench_int(b):
|
|
for _ in range(b.n):
|
|
a = 0
|
|
for _ in range1000:
|
|
a += 1
|
|
|
|
def bench_bigint(b):
|
|
for _ in range(b.n):
|
|
a = 1 << 31 # maxint32 + 1
|
|
for _ in range1000:
|
|
a += 1
|
|
|
|
def bench_gauss(b):
|
|
# Sum of arithmetic series. All results fit in int32.
|
|
for _ in range(b.n):
|
|
acc = 0
|
|
for x in range(92000):
|
|
acc += x
|
|
|
|
def bench_mix(b):
|
|
"Benchmark of a simple mix of computation (for, if, arithmetic, comprehension)."
|
|
for _ in range(b.n):
|
|
x = 0
|
|
for i in range(50):
|
|
if i:
|
|
x += 1
|
|
a = [x for x in range(i)]
|
|
|
|
largedict = {str(v): v for v in range(1000)}
|
|
|
|
def bench_dict_equal(b):
|
|
"Benchmark of dict equality operation."
|
|
for _ in range(b.n):
|
|
if largedict != largedict:
|
|
fail("invalid comparison")
|
|
|
|
largeset = set([v for v in range(1000)])
|
|
|
|
def bench_set_equal(b):
|
|
"Benchmark of set union operation."
|
|
for _ in range(b.n):
|
|
if largeset != largeset:
|
|
fail("invalid comparison")
|
|
|
|
flat = { "int": 1, "float": 0.2, "string": "string", "list": [], "bool": True, "nil": None, "tuple": (1, 2, 3) }
|
|
deep = {
|
|
"type": "int",
|
|
"value": 1,
|
|
"next": {
|
|
"type": "float",
|
|
"value": 0.2,
|
|
"next": {
|
|
"type": "string",
|
|
"value": "string",
|
|
"next": {
|
|
"type": "list",
|
|
"value": [ 1, "", True, None, (1, 2) ],
|
|
"next": {
|
|
"type": "bool",
|
|
"value": True,
|
|
"next": {
|
|
"type": "tuple",
|
|
"value": (1, 2.0, "3"),
|
|
"next": None
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
deep_list = [ deep for _ in range(100) ]
|
|
|
|
def bench_to_json_flat_mixed(b):
|
|
"Benchmark json.encode builtin with flat mixed input"
|
|
for _ in range(b.n):
|
|
json.encode(flat)
|
|
|
|
def bench_to_json_flat_big(b):
|
|
"Benchmark json.encode builtin with big flat integer input"
|
|
for _ in range(b.n):
|
|
json.encode(largedict)
|
|
|
|
def bench_to_json_deep(b):
|
|
"Benchmark json.encode builtin with deep input"
|
|
for _ in range(b.n):
|
|
json.encode(deep)
|
|
|
|
def bench_to_json_deep_list(b):
|
|
"Benchmark json.encode builtin with a list of deep input"
|
|
for _ in range(b.n):
|
|
json.encode(deep)
|
|
|
|
def bench_issubset_unique_large_small(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(10000))
|
|
for _ in range(b.n):
|
|
s.issubset(range(1000))
|
|
|
|
def bench_issubset_unique_small_large(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(1000))
|
|
for _ in range(b.n):
|
|
s.issubset(range(10000))
|
|
|
|
def bench_issubset_unique_same(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(1000))
|
|
for _ in range(b.n):
|
|
s.issubset(range(1000))
|
|
|
|
def bench_issubset_duplicate_large_small(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(10000))
|
|
l = list(range(200)) * 5
|
|
for _ in range(b.n):
|
|
s.issubset(range(1000))
|
|
|
|
def bench_issubset_duplicate_small_large(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(1000))
|
|
l = list(range(2000)) * 5
|
|
for _ in range(b.n):
|
|
s.issubset(l)
|
|
|
|
def bench_issubset_duplicate_same(b):
|
|
"Benchmark set.issubset builtin"
|
|
s = set(range(1000))
|
|
l = list(range(200)) * 5
|
|
for _ in range(b.n):
|
|
s.issubset(l)
|