xref: /aosp_15_r20/external/starlark-go/starlark/testdata/benchmark.star (revision 4947cdc739c985f6d86941e22894f5cefe7c9e9a)
1# Benchmarks of Starlark execution
2
3def bench_range_construction(b):
4    for _ in range(b.n):
5        range(200)
6
7def bench_range_iteration(b):
8    for _ in range(b.n):
9        for x in range(200):
10            pass
11
12# Make a 2-level call tree of 100 * 100 calls.
13def bench_calling(b):
14    list = range(100)
15
16    def g():
17        for x in list:
18            pass
19
20    def f():
21        for x in list:
22            g()
23
24    for _ in range(b.n):
25        f()
26
27# Measure overhead of calling a trivial built-in method.
28emptydict = {}
29range1000 = range(1000)
30
31def bench_builtin_method(b):
32    for _ in range(b.n):
33        for _ in range1000:
34            emptydict.get(None)
35
36def bench_int(b):
37    for _ in range(b.n):
38        a = 0
39        for _ in range1000:
40            a += 1
41
42def bench_bigint(b):
43    for _ in range(b.n):
44        a = 1 << 31  # maxint32 + 1
45        for _ in range1000:
46            a += 1
47
48def bench_gauss(b):
49    # Sum of arithmetic series. All results fit in int32.
50    for _ in range(b.n):
51        acc = 0
52        for x in range(92000):
53            acc += x
54
55def bench_mix(b):
56    "Benchmark of a simple mix of computation (for, if, arithmetic, comprehension)."
57    for _ in range(b.n):
58        x = 0
59        for i in range(50):
60            if i:
61                x += 1
62            a = [x for x in range(i)]
63