[ 
https://issues.apache.org/jira/browse/BEAM-2970?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16174188#comment-16174188
 ] 

ASF GitHub Bot commented on BEAM-2970:
--------------------------------------

GitHub user sarahwalters opened a pull request:

    https://github.com/apache/beam/pull/3878

    [BEAM-2970] Add contains_in_any_order matcher

    Follow this checklist to help us incorporate your contribution quickly and 
easily:
    
     - [X] Make sure there is a [JIRA 
issue](https://issues.apache.org/jira/projects/BEAM/issues/) filed for the 
change (usually before you start working on it).  Trivial changes like typos do 
not require a JIRA issue.  Your pull request should address just this issue, 
without pulling in other changes.
     - [X] Each commit in the pull request should have a meaningful subject 
line and body.
     - [X] Format the pull request title like `[BEAM-XXX] Fixes bug in 
ApproximateQuantiles`, where you replace `BEAM-XXX` with the appropriate JIRA 
issue.
     - [X] Write a pull request description that is detailed enough to 
understand what the pull request does, how, and why.
     - [X] Run `mvn clean verify` to make sure basic checks pass. A more 
thorough check will be performed on your pull request automatically.
     - [ ] If this contribution is large, please file an Apache [Individual 
Contributor License Agreement](https://www.apache.org/licenses/icla.pdf).
    
    ---
    
    The Python testing utilities already provide an equal_to matcher, but the 
equal_to matcher assumes that the lists it's comparing contain objects which 
can be compared using < and ==. In particular, classes don't always define < 
and ==. contains_in_any_order is more general than equal_to: it doesn't rely on 
< and ==; instead, it takes as an argument a list of matcher functions, 
allowing the caller to provide its own definition of equality.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/sarahwalters/beam contains_in_any_order

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/beam/pull/3878.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #3878
    
----
commit 295c936aaf247788a441a8b0575ee057588f35cb
Author: Sarah Walters <sarahwalt...@google.com>
Date:   2017-09-20T23:08:06Z

    Add a contains_in_any_order matcher.
    
    The testing utilities already provide an equal_to matcher,
    but the equal_to matcher assumes that the lists it's comparing
    contain objects which can be compared using < and ==. In
    particular, classes don't always define < and ==.
    contains_in_any_order is more general than equal_to -- it
    doesn't rely on < and ==; instead, it takes as an argument
    a list of matcher functions, allowing the caller to provide
    its own definition of equality.

commit 44dd2c6e7b27113d4cfd47a0b502a4e0b6cb87af
Author: Sarah Walters <sarahwalt...@google.com>
Date:   2017-09-21T02:41:45Z

    Fix contains_in_any_order so it ignores order
    
    Now, contains_in_any_order performs a breadth-first search to find
    a mapping from items to predicates they satisfy. With this change,
    it becomes acceptable to specify predicates that match multiple
    items -> there's no danger of a predicate meant to match item i
    matching item j instead and being unavailable to match item i.

----


> Add comparator function to equal_to
> -----------------------------------
>
>                 Key: BEAM-2970
>                 URL: https://issues.apache.org/jira/browse/BEAM-2970
>             Project: Beam
>          Issue Type: Improvement
>          Components: sdk-py-core
>            Reporter: Sarah Walters
>            Assignee: Ahmet Altay
>            Priority: Minor
>
> The equal_to function provided by testing/util.py 
> (https://github.com/apache/beam/blob/master/sdks/python/apache_beam/testing/util.py#L54)
>  assumes that the actual and expected lists can be sorted using Python's 
> sorted method (which relies on the < operator) and compared using the == 
> operator.
> If this isn't the case, equal_to sometimes reports False incorrectly, when 
> the expected and actual lists are in different orders.
> Add a comparator function to equal_to in order to allow callers to define a 
> total order.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to