2012-02-08 Adam Barth <abarth@webkit.org>
+ test_configuration.py shouldn't re-implement itertools
+ https://bugs.webkit.org/show_bug.cgi?id=78178
+
+ Reviewed by Eric Seidel.
+
+ * Scripts/webkitpy/layout_tests/models/test_configuration.py:
+ (TestConfigurationConverter.to_specifiers_list):
+ (TestConfigurationConverter.to_specifiers_list.try_collapsing):
+ (TestConfigurationConverter.to_specifiers_list.try_abbreviating):
+ (TestConfigurationConverter):
+
+2012-02-08 Adam Barth <abarth@webkit.org>
+
webkitpy should reply upon the multiprocessing package existing
https://bugs.webkit.org/show_bug.cgi?id=78176
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""Representation of a layout test configuration."""
+import itertools
class TestConfiguration(object):
def __init__(self, version, architecture, build_type, graphics_type):
values -= junk_specifier_set
specifiers_list.append(frozenset(values))
- # FIXME: Replace with iteritools.combinations when we obsolete Python 2.5.
- def combinations(iterable, r):
- """This function is borrowed verbatim from http://docs.python.org/library/itertools.html#itertools.combinations."""
- pool = tuple(iterable)
- n = len(pool)
- if r > n:
- return
- indices = range(r)
- yield tuple(pool[i] for i in indices)
- while True:
- for i in reversed(range(r)):
- if indices[i] != i + n - r:
- break
- else:
- return
- indices[i] += 1
- for j in range(i + 1, r):
- indices[j] = indices[j - 1] + 1
- yield tuple(pool[i] for i in indices)
-
def intersect_combination(combination):
return reduce(set.intersection, [set(specifiers) for specifiers in combination])
def try_collapsing(size, collapsing_sets):
if len(specifiers_list) < size:
return False
- for combination in combinations(specifiers_list, size):
+ for combination in itertools.combinations(specifiers_list, size):
if symmetric_difference(combination) in collapsing_sets:
for item in combination:
specifiers_list.remove(item)
def try_abbreviating():
if len(specifiers_list) < 2:
return False
- for combination in combinations(specifiers_list, 2):
+ for combination in itertools.combinations(specifiers_list, 2):
for collapsing_set in collapsing_sets:
diff = symmetric_difference(combination)
if diff <= collapsing_set: