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