1 2import sys 3import random 4 5base = sys.argv[1] 6 7field_freqs = [ 8 (('bool', 'optional'), 8.321), 9 (('bool', 'repeated'), 0.033), 10 (('bytes', 'optional'), 0.809), 11 (('bytes', 'repeated'), 0.065), 12 (('double', 'optional'), 2.845), 13 (('double', 'repeated'), 0.143), 14 (('fixed32', 'optional'), 0.084), 15 (('fixed32', 'repeated'), 0.012), 16 (('fixed64', 'optional'), 0.204), 17 (('fixed64', 'repeated'), 0.027), 18 (('float', 'optional'), 2.355), 19 (('float', 'repeated'), 0.132), 20 (('int32', 'optional'), 6.717), 21 (('int32', 'repeated'), 0.366), 22 (('int64', 'optional'), 9.678), 23 (('int64', 'repeated'), 0.425), 24 (('sfixed32', 'optional'), 0.018), 25 (('sfixed32', 'repeated'), 0.005), 26 (('sfixed64', 'optional'), 0.022), 27 (('sfixed64', 'repeated'), 0.005), 28 (('sint32', 'optional'), 0.026), 29 (('sint32', 'repeated'), 0.009), 30 (('sint64', 'optional'), 0.018), 31 (('sint64', 'repeated'), 0.006), 32 (('string', 'optional'), 25.461), 33 (('string', 'repeated'), 2.606), 34 (('Enum', 'optional'), 6.16), 35 (('Enum', 'repeated'), 0.576), 36 (('Message', 'optional'), 22.472), 37 (('Message', 'repeated'), 7.766), 38 (('uint32', 'optional'), 1.289), 39 (('uint32', 'repeated'), 0.051), 40 (('uint64', 'optional'), 1.044), 41 (('uint64', 'repeated'), 0.079), 42] 43 44population = [item[0] for item in field_freqs] 45weights = [item[1] for item in field_freqs] 46 47def choices(k): 48 if sys.version_info >= (3, 6): 49 return random.choices(population=population, weights=weights, k=k) 50 else: 51 print("WARNING: old Python version, field types are not properly weighted!") 52 return [random.choice(population) for _ in range(k)] 53 54with open(base + "/100_msgs.proto", "w") as f: 55 f.write('syntax = "proto3";\n') 56 f.write('package upb_benchmark;\n') 57 f.write('message Message {}\n') 58 for i in range(2, 101): 59 f.write('message Message{i} {{}}\n'.format(i=i)) 60 61with open(base + "/200_msgs.proto", "w") as f: 62 f.write('syntax = "proto3";\n') 63 f.write('package upb_benchmark;\n') 64 f.write('message Message {}\n') 65 for i in range(2, 501): 66 f.write('message Message{i} {{}}\n'.format(i=i)) 67 68with open(base + "/100_fields.proto", "w") as f: 69 f.write('syntax = "proto2";\n') 70 f.write('package upb_benchmark;\n') 71 f.write('enum Enum { ZERO = 0; }\n') 72 f.write('message Message {\n') 73 i = 1 74 random.seed(a=0, version=2) 75 for field in choices(100): 76 field_type, label = field 77 f.write(' {label} {field_type} field{i} = {i};\n'.format(i=i, label=label, field_type=field_type)) 78 i += 1 79 f.write('}\n') 80 81with open(base + "/200_fields.proto", "w") as f: 82 f.write('syntax = "proto2";\n') 83 f.write('package upb_benchmark;\n') 84 f.write('enum Enum { ZERO = 0; }\n') 85 f.write('message Message {\n') 86 i = 1 87 random.seed(a=0, version=2) 88 for field in choices(200): 89 field_type, label = field 90 f.write(' {label} {field_type} field{i} = {i};\n'.format(i=i, label=label,field_type=field_type)) 91 i += 1 92 f.write('}\n') 93