gen_obj.py revision 4cc3dd8a3b2ab04cf861d7c71967de0298746cb9
1#!/usr/bin/python2
2"""Script to generate a list of object files.
3
40 represents a good object file.
51 represents a bad object file.
6"""
7
8from __future__ import print_function
9
10import argparse
11import os
12import random
13import sys
14
15import common
16
17
18def Main(argv):
19  """Generates a list, the value of each element is 0 or 1.
20
21  The number of 1s in the list is specified by bad_obj_num.
22  The others are all 0s. The total number of 0s and 1s is specified by obj_num.
23
24  Args:
25    argv: argument from command line
26
27  Returns:
28    0 always.
29  """
30  parser = argparse.ArgumentParser()
31  parser.add_argument(
32      '-n',
33      '--obj_num',
34      dest='obj_num',
35      default=common.DEFAULT_OBJECT_NUMBER,
36      help=('Number of total objects.'))
37  parser.add_argument(
38      '-b',
39      '--bad_obj_num',
40      dest='bad_obj_num',
41      default=common.DEFAULT_BAD_OBJECT_NUMBER,
42      help=('Number of bad objects. Must be great than or '
43            'equal to zero and less than total object '
44            'number.'))
45  parser.add_argument(
46      '-o',
47      '--obj_list',
48      dest='obj_list',
49      default='',
50      help=('List of comma seperated objects to generate. '
51            'A 0 means the object is good, a 1 means the '
52            'object is bad.'))
53  options = parser.parse_args(argv)
54
55  obj_num = int(options.obj_num)
56  bad_obj_num = int(options.bad_obj_num)
57  bad_to_gen = int(options.bad_obj_num)
58  obj_list = options.obj_list
59  if not obj_list:
60    obj_list = []
61    for i in range(obj_num):
62      if bad_to_gen > 0 and random.randint(1, obj_num) <= bad_obj_num:
63        obj_list.append(1)
64        bad_to_gen -= 1
65      else:
66        obj_list.append(0)
67    while bad_to_gen > 0:
68      t = random.randint(0, obj_num - 1)
69      if obj_list[t] == 0:
70        obj_list[t] = 1
71        bad_to_gen -= 1
72  else:
73    obj_list = obj_list.split(',')
74
75  if os.path.isfile(common.OBJECTS_FILE):
76    os.remove(common.OBJECTS_FILE)
77  if os.path.isfile(common.WORKING_SET_FILE):
78    os.remove(common.WORKING_SET_FILE)
79
80  f = open(common.OBJECTS_FILE, 'w')
81  w = open(common.WORKING_SET_FILE, 'w')
82  for i in obj_list:
83    f.write('{0}\n'.format(i))
84    w.write('{0}\n'.format(i))
85  f.close()
86
87  obj_num = len(obj_list)
88  bad_obj_num = obj_list.count('1')
89  print('Generated {0} object files, with {1} bad ones.'.format(obj_num,
90                                                                bad_obj_num))
91
92  return 0
93
94
95if __name__ == '__main__':
96  retval = Main(sys.argv[1:])
97  sys.exit(retval)
98