File: merge_data_test.py

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (106 lines) | stat: -rw-r--r-- 2,792 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# Copyright (c) 2014 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from collections import defaultdict
import pprint
import sys

from merge_data import CreateIndexedLookup, MergeRawTree
from print_data import PrintData


CONDA = ['A1', 'A2', 'A3']
CONDB = ['B1', 'B2', 'B3']

CONFIG_ALL = [a + '_' + b for a in CONDA for b in CONDB]

CONFIG_A1 = [ 'A1_B1',  'A1_B2', 'A1_B3' ]
CONFIG_B1 = [ 'A1_B1',  'A2_B1', 'A3_B1' ]

CONFIG_SET1 = [ 'A1_B1',  'A1_B2', 'A2_B2' ]
CONFIG_SET2 = [ 'A1_B1']
CONFIG_SET3 = [ 'A1_B1', 'A2_B3']


class TestNode(object):
  def __init__(self, configs):
    self.configs = configs

TEST_ALL = {
  'target_1': TestNode(CONFIG_ALL),
  'target_2': TestNode(CONFIG_ALL),
  'target_3': TestNode(CONFIG_ALL),
}

TEST_NOT3 = {
  'target_1': TestNode(CONFIG_ALL),
  'target_2': TestNode(CONFIG_ALL),
  'target_3': TestNode(CONFIG_SET2),
}

TEST_A1_B1 = {
  'target_1': TestNode(CONFIG_A1),
  'target_2': TestNode(CONFIG_B1),
  'target_3': TestNode(CONFIG_ALL),
}

def SameAsOriginal(table, hits):
  for target in hits:
    table_set = set(table[target].configs)
    trans_set = set(hits[target])
    if table_set != trans_set:
      table_set_items = ' '.join(table_set)
      trans_set_items = ' '.join(trans_set)
      print 'FAIL %s: %s vs %s' % (target, table_set_items, trans_set_items)
      return False
  return True


def CompareOriginalToTransformed(table, transformed, name):
  trans_hits = defaultdict(list)
  for keya, hit_table in transformed.iteritems():
    for hitsb, values in hit_table.iteritems():
      for value in values:
        trans_hits[value].extend([keya + '_' + b for b in hitsb.split(' ')])

  if not SameAsOriginal(table, trans_hits):
    PrintData(table)
    PrintData(transformed)
    return 1
  return 0


def CompareOriginalToMerged(table, merged, name):
  trans_hits = defaultdict(list)
  for targets, seta, setb in merged:
    for target in targets:
      trans_hits[target].extend([a+'_'+b for a in seta for b in setb])

  if not SameAsOriginal(table, trans_hits):
    PrintData(table)
    PrintData(merged)
    return 1
  return 0


def TestTransform(table, name, verbose=False):
  transformed  = CreateIndexedLookup(table, CONDA, CONDB)
  cnt  = CompareOriginalToTransformed(table, transformed, name)
  merged = MergeRawTree(table, CONDA, CONDA, CONDB)
  cnt += CompareOriginalToMerged(table, merged, name)
  if verbose:
    PrintData(merged)
  if not cnt:
    print 'PASS ' + name
    return 0
  print 'FAILED ' + name
  return 1


if __name__ == '__main__':
  retval = 0
  retval += TestTransform(TEST_ALL, 'All')
  retval += TestTransform(TEST_NOT3, 'Not3')
  retval += TestTransform(TEST_A1_B1, 'A1B1')
  sys.exit(retval)