[JIRA] (GLAZEDLISTS-585) TreeList duplicates elements

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[JIRA] (GLAZEDLISTS-585) TreeList duplicates elements

JIRA jira-no-reply@java.net
FrankRaiser created GLAZEDLISTS-585:
---------------------------------------

             Summary: TreeList duplicates elements
                 Key: GLAZEDLISTS-585
                 URL: https://java.net/jira/browse/GLAZEDLISTS-585
             Project: glazedlists
          Issue Type: Bug
    Affects Versions: 1.9.0
            Reporter: FrankRaiser
            Assignee: jessewilson


When inserting elements in a bad order into the original list, then the TreeList sometimes duplicates the root nodes (I guess it's due to a real vs virtual element).

Here's a JUnit test with a simple example that shows, that the getRoots result is correct, but the getNodesList contains additional nodes:

@Test
        public void treeListBug() {
                final EventList<Integer> list = new BasicEventList<>();
                final TreeList<Integer> tree = new TreeList<Integer>(list,
                                new TreeList.Format<Integer>() {

                                        @Override
                                        public void getPath(List<Integer> path, Integer element) {
                                                if (element % 2 == 0) {
                                                        path.add(0);
                                                        if (element > 0) { path.add(element); }
                                                } else {
                                                        path.add(1);
                                                        if (element > 1) { path.add(element); }
                                                }
                                        }

                                        @Override
                                        public boolean allowsChildren(Integer element) {
                                                return true;
                                        }

                                        @Override
                                        public Comparator<? super Integer> getComparator(int depth) {
                                                return null;
                                        }
                       
                                }, new DefaultExternalExpansionModel<>());
               
                List<Integer> even = IntStream.range(2, 20).filter(i -> i % 2 == 0).mapToObj(i -> i).collect(Collectors.toList());
                List<Integer> odd = IntStream.range(2, 20).filter(i -> i % 2 == 1).mapToObj(i -> i).collect(Collectors.toList());
               
// list.addAll(Arrays.asList(0,1));
                list.add(1);
               
                // This test works, when the two lines below are switched
                list.add(0);
                list.addAll(odd);
               
                list.addAll(even);
               
                Set<Integer> rootValues = tree.getRoots().stream().map(n -> n.getElement()).collect(Collectors.toSet());
                assertEquals(new HashSet<>(Arrays.asList(0, 1)), rootValues);
               
                assertEquals(2 + odd.size() + even.size(), tree.getNodesList().size());
        }



--
This message was sent by Atlassian JIRA
(v6.2.3#6260)
Loading...