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