Advertisement
_alko_

tests for stackoverflow.com/posts/19811554

Nov 6th, 2013
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.03 KB | None | 0 0
  1. import random
  2. import collections
  3. import string
  4. import sys
  5. import time
  6. import numpy
  7.  
  8. random.seed()
  9.  
  10. def reed(original_list):
  11.     totals = {}
  12.     for k,v in original_list:
  13.       totals[k] = totals.get(k,0) + v
  14.     return map(list, totals.items())
  15.  
  16. def thefourtheye(original_list):
  17.     myDict = {}
  18.     for first, second in original_list:
  19.         myDict[first] = myDict.setdefault(first, 0)
  20.         myDict[first] += second
  21.     return map(list, myDict.items())
  22.  
  23. def thefourtheye2(original_list):
  24.     return [[key, sum(item[1] for item in list(group))]
  25.                for key, group in itertools.groupby(sorted(original_list), lambda x:x[0])]
  26.  
  27. def visser(original_list):
  28.     data = collections.defaultdict(list)
  29.     for item in original_list:
  30.         data[item[0]].append(item[1])
  31.     output = {key: sum(values) for key, values in data.items()}
  32.     return [[k, v] for k, v in output.iteritems()]
  33.  
  34.  
  35. def kroolik(original_list):
  36.     c = collections.Counter(x for x, c in original_list for _ in xrange(c))
  37.     return map(list, c.iteritems())
  38.  
  39.  
  40. def kroolik2(original_list):
  41.     c = sum((collections.Counter(**{k:v}) for k, v in original_list), collections.Counter())
  42.     return [[k, v] for k, v in c.iteritems()]
  43.  
  44. def alko(original_list):
  45.     result = collections.Counter()
  46.     for k, v in original_list:
  47.          result.update({k:v})
  48.     return map(list, result.items())
  49.  
  50. def void(original_list):
  51.     return map(list, set(([(x[0], sum([i[1] for i in original_list if i[0]==x[0]])) for x in original_list])))
  52.  
  53. def _set_up_list(size, min_value, max_value):
  54.     return [[random.choice(string.letters), random.randint(min_value, max_value)]
  55.                  for _ in xrange(size)]
  56.  
  57. def _run_tests(size, min_value, max_value, iterations=100, samples=1000):
  58.     tests = {k: v for k, v in sys.modules['__main__'].__dict__.items()
  59.                   if callable(v) and not v.__name__.startswith('_')}
  60.     print 'testing: %s' % ', '.join(tests.keys())
  61.     print '%s samples' % str(samples).rjust(5)
  62.     print '%s iterations each' % str(iterations).rjust(5)
  63.     test_results = collections.defaultdict(list)
  64.     for s in xrange(samples):
  65.         ol = _set_up_list(size, min_value, max_value)
  66.         for test_name in tests:
  67.             start_time = time.time()
  68.             for i in xrange(iterations):
  69.                 tests[test_name](ol)
  70.             test_results[test_name].append(time.time() - start_time)
  71.     return test_results
  72.    
  73. def _avg(l):
  74.     return 1.0*sum(l)/len(l)
  75.  
  76. if __name__ == '__main__':
  77.     samples, iterations = map(int, sys.argv[1:])
  78.     test_results = _run_tests(100, 0, 1000, samples, iterations)
  79.     print '\t'.join(['author'.rjust(15), '  min', '  avg', '  max', ' stddev'])
  80.     for author, results in sorted(test_results.items(), key = lambda x: _avg(x[1])):
  81.          print '%s\t%s' % (author.rjust(15),
  82.                            '\t'.join(map(lambda x: '%.5f' % x,
  83.                                     [min(results), _avg(results), max(results),
  84.                                          numpy.std(results)])))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement