Stamatis Zampetakis created CALCITE-6698:
--------------------------------------------

             Summary: Wrong (swapped) results in 
PartiallyOrderedSet#getNonChildren and getNonParents
                 Key: CALCITE-6698
                 URL: https://issues.apache.org/jira/browse/CALCITE-6698
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: Stamatis Zampetakis
            Assignee: Stamatis Zampetakis
             Fix For: 1.39.0


{{PartiallyOrderedSet#getNonChildren}} and 
{{PartiallyOrderedSet#getNonParents}} methods return wrong results.

According to the class Javadoc:
{code:java}
 * <p>In addition to the usual set methods, there are methods to determine the
 * immediate parents and children of an element in the set, and method to find
 * all elements which have no parents or no children (i.e. "root" and "leaf"
 * elements).
{code}
* {{getNonChildren}} should return all elements which have no children (leafs)
* {{getNonParents}} should return all elements which have no parents (roots)

Currently, the two methods return the opposite results. 

{code:java}
PartiallyOrderedSet<Integer> poset =
        new PartiallyOrderedSet<>((i,j) -> i <= j);
    poset.add(10);
    poset.add(20);
    poset.add(30);
    StringBuilder sb = new StringBuilder();
    poset.out(sb);
{code}

{noformat}
PartiallyOrderedSet size: 3 elements: {
  30 parents: [] children: [20]
  20 parents: [30] children: [10]
  10 parents: [20] children: []
}
{noformat}

{code:java}
poset.getNonChildren(); // should return 10 but it returns 30
poset.getNonParents(); // should return 30 but it returns 10
{code}

The current implementation also contradicts the results of 
getChildren/getParents methods:
{code:java}
poset.getChildren(30); // returns 20 so it contradicts getNonChildren()
poset.getParents(10); // returns 20 so it contradicts getNonParents() 
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to