/** * GRANITE DATA SERVICES * Copyright (C) 2006-2015 GRANITE DATA SERVICES S.A.S. * * This file is part of the Granite Data Services Platform. * * Granite Data Services is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * Granite Data Services is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA, or see <http://www.gnu.org/licenses/>. */ package org.granite.test.tide.data; import java.util.ArrayList; import java.util.List; import java.util.Random; import junit.framework.Assert; import org.granite.tide.data.Utils; import org.junit.Test; @SuppressWarnings("deprecation") public class TestDataUtils { @Test public void testDiffAdd1() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); newList.add(c1); newList.add(c2); newList.add(c3); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); Assert.assertEquals("2 ops", 2, ops.size()); Assert.assertEquals("Op 1 add", 1, ops.get(0)[0]); Assert.assertEquals("Op 1 idx", 2, ops.get(0)[1]); Assert.assertEquals("Op 2 add", 1, ops.get(1)[0]); Assert.assertEquals("Op 2 idx", 3, ops.get(1)[1]); } @Test public void testDiffAdd2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); newList.add(c1); newList.add(c3); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); Assert.assertEquals("1 op", 1, ops.size()); Assert.assertEquals("Op 1 add", 1, ops.get(0)[0]); Assert.assertEquals("Op 1 idx", 1, ops.get(0)[1]); } @Test public void testDiffAdd3() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); newList.add(c1); newList.add(c2); newList.add(c3); newList.add(c3); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); Assert.assertEquals("2 ops", 2, ops.size()); Assert.assertEquals("Op 1 add", 1, ops.get(0)[0]); Assert.assertEquals("Op 1 idx", 2, ops.get(0)[1]); Assert.assertEquals("Op 2 add", 1, ops.get(1)[0]); Assert.assertEquals("Op 2 idx", 3, ops.get(1)[1]); } @Test public void testDiffAdd4() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); newList.add(c1); newList.add(c2); newList.add(c1); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffAdd5() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); newList.add(c2); newList.add(c1); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffSub1() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); newList.add(c1); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); Assert.assertEquals("2 ops", 1, ops.size()); Assert.assertEquals("Op 1 rem", -1, ops.get(0)[0]); Assert.assertEquals("Op 1 idx", 2, ops.get(0)[1]); } @Test public void testDiffSub2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c3); oldList.add(c2); newList.add(c1); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); Assert.assertEquals("1 op", 1, ops.size()); Assert.assertEquals("Op 1 rem", -1, ops.get(0)[0]); Assert.assertEquals("Op 1 idx", 1, ops.get(0)[1]); } @Test public void testDiffOrder() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c1); newList.add(c2); newList.add(c4); newList.add(c3); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c2); newList.add(c3); newList.add(c1); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffRevert() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffRevert2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c4); oldList.add(c1); oldList.add(c2); oldList.add(c3); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffDoubles() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c5); oldList.add(c3); oldList.add(c2); oldList.add(c1); oldList.add(c5); newList.add(c3); newList.add(c3); newList.add(c5); newList.add(c4); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder3() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c2); newList.add(c3); newList.add(c1); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder3b() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c1); newList.add(c2); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder4() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c2); newList.add(c1); newList.add(c4); newList.add(c3); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffRevert3() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c4); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder6() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c4); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder7() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); newList.add(c3); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder8() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c6); newList.add(c5); newList.add(c4); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder8a() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); newList.add(c5); newList.add(c4); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder8b() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c7); newList.add(c6); newList.add(c5); newList.add(c4); newList.add(c3); newList.add(c2); newList.add(c1); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrder9() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c3); newList.add(c2); newList.add(c1); newList.add(c6); newList.add(c5); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c1); newList.add(c6); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c3); newList.add(c5); newList.add(c1); newList.add(c7); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem2b() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c3); newList.add(c7); newList.add(c1); newList.add(c6); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem2c() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c4); newList.add(c5); newList.add(c6); newList.add(c1); newList.add(c3); newList.add(c7); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem2d() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); oldList.add(c5); oldList.add(c6); newList.add(c3); newList.add(c1); newList.add(c4); newList.add(c5); newList.add(c7); newList.add(c6); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem2e() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c2); oldList.add(c5); oldList.add(c6); newList.add(c4); newList.add(c3); newList.add(c7); newList.add(c4); newList.add(c5); newList.add(c6); newList.add(c7); newList.add(c7); newList.add(c6); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem3() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c1); newList.add(c6); newList.add(c2); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderRem4() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c2); newList.add(c6); newList.add(c6); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); newList.add(c1); newList.add(c3); newList.add(c2); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c4); newList.add(c6); newList.add(c2); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd3() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c4); newList.add(c6); newList.add(c2); newList.add(c1); newList.add(c7); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd4() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); Classification c8 = new Classification(null, null, "C8"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c3); newList.add(c5); newList.add(c4); newList.add(c6); newList.add(c8); newList.add(c2); newList.add(c7); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd9() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c1); newList.add(c5); newList.add(c4); newList.add(c2); newList.add(c6); newList.add(c7); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd10() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c5); newList.add(c1); newList.add(c2); newList.add(c6); newList.add(c7); newList.add(c4); newList.add(c3); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffOrderAdd11() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); Classification c6 = new Classification(null, null, "C6"); Classification c7 = new Classification(null, null, "C7"); Classification c8 = new Classification(null, null, "C8"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c5); newList.add(c6); newList.add(c7); newList.add(c1); newList.add(c4); newList.add(c3); newList.add(c8); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffSet() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c1); newList.add(c5); newList.add(c3); newList.add(c4); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffSet2() { Classification c1 = new Classification(null, null, "C1"); Classification c2 = new Classification(null, null, "C2"); Classification c3 = new Classification(null, null, "C3"); Classification c4 = new Classification(null, null, "C4"); Classification c5 = new Classification(null, null, "C5"); List<Classification> oldList = new ArrayList<Classification>(); List<Classification> newList = new ArrayList<Classification>(); oldList.add(c1); oldList.add(c2); oldList.add(c3); oldList.add(c4); newList.add(c1); newList.add(c3); newList.add(c3); newList.add(c4); newList.add(c5); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } @Test public void testDiffRandom() { Random random = new Random(System.currentTimeMillis()); for (int count = 0; count < 1000; count++) { int oldSize = random.nextInt(200); int newSize = random.nextInt(200); int max = Math.max(oldSize, newSize); Classification[] c = new Classification[max]; for (int i = 0; i < max; i++) c[i] = new Classification(null, null, "C" + i); List<Classification> oldList = new ArrayList<Classification>(oldSize); List<Classification> newList = new ArrayList<Classification>(newSize); for (int i = 0; i < oldSize; i++) oldList.add(c[random.nextInt(oldSize)]); for (int i = 0; i < newSize; i++) newList.add(c[random.nextInt(newSize)]); List<Object[]> ops = Utils.diffLists(oldList, newList); checkListDiff(oldList, newList, ops); } } private void checkListDiff(List<Classification> oldList, List<Classification> newList, List<Object[]> ops) { StringBuilder sb = new StringBuilder(); for (Classification c : oldList) sb.append(c.getUid()).append(" "); System.out.println("Initial : " + sb); sb = new StringBuilder(); for (Classification c : newList) sb.append(c.getUid()).append(" "); System.out.println("Expected: " + sb); System.out.printf("%d operations: ", ops.size()); for (Object[] op : ops) System.out.printf("%d %d %s ", op[0], op[1], ((Classification)op[2]).getUid()); System.out.println(); List<Classification> checkList = new ArrayList<Classification>(oldList); for (Object[] op : ops) { if (op[0].equals(-1)) checkList.remove(((Integer)op[1]).intValue()); else if (op[0].equals(1)) checkList.add(((Integer)op[1]).intValue(), (Classification)op[2]); else if (op[0].equals(0)) checkList.set(((Integer)op[1]).intValue(), (Classification)op[2]); } sb = new StringBuilder(); for (Classification c : checkList) sb.append(c.getUid()).append(" "); System.out.println("Result : " + sb); Assert.assertEquals("Expected list size", newList.size(), checkList.size()); for (int i = 0; i < checkList.size(); i++) Assert.assertEquals("Element " + i, newList.get(i).getUid(), checkList.get(i).getUid()); } }