package com.sap.furcas.runtime.parser.incremental;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Iterator;
import org.junit.Test;
import com.sap.ide.cts.parser.incremental.util.TarjansLCA;
import com.sap.ide.cts.parser.incremental.util.TarjansLCA.Node;
import com.sap.ide.cts.parser.incremental.util.TarjansLCA.SearchSet;
public class TestTarjansLCA {
@SuppressWarnings("unchecked")
@Test
public void simpleLCA() {
// create tree
Node<Integer> p[] = new Node[24];
p[0] = new Node<Integer>(0, null); // root
p[1] = new Node<Integer>(1, p[0]);
p[2] = new Node<Integer>(2, p[0]);
p[3] = new Node<Integer>(3, p[2]);
p[4] = new Node<Integer>(4, p[2]);
// make lca query
ArrayList<SearchSet<Integer>> q = new ArrayList<SearchSet<Integer>>();
q.add(new SearchSet<Integer>(p[3].getArgumet(), p[4].getArgumet()));
// lca
TarjansLCA<Integer> lca = new TarjansLCA<Integer>(null);
lca.lca(p[0], q);
// dump results
assertEquals(2, (int)q.get(0).result);
}
@SuppressWarnings("unchecked")
@Test
public void testLCA() {
// create tree
/*
* 0
+--------------+--------------------+
| | |
1 2 3
+-----+------+ +---+ +-------+---------+
| | | | | | | |
4 5 6 7 8 9 10 11
+---+ + + +--+------+ |
| | | | | | 23
12 13 14 15 16 17
+--------+ +----+----+
| | | | |
18 19 20 21 22
*/
Node<Integer> p[] = new Node[24];
p[0] = new Node<Integer>(0, null); // root
p[1] = new Node<Integer>(1, p[0]);
p[2] = new Node<Integer>(2, p[0]);
p[3] = new Node<Integer>(3, p[0]);
p[4] = new Node<Integer>(4, p[1]);
p[5] = new Node<Integer>(5, p[1]);
p[6] = new Node<Integer>(6, p[1]);
p[7] = new Node<Integer>(7, p[2]);
p[8] = new Node<Integer>(8, p[2]);
p[9] = new Node<Integer>(9, p[3]);
p[10] = new Node<Integer>(10, p[3]);
p[11] = new Node<Integer>(11, p[3]);
p[12] = new Node<Integer>(12, p[4]);
p[13] = new Node<Integer>(13, p[4]);
p[14] = new Node<Integer>(14, p[6]);
p[15] = new Node<Integer>(15, p[8]);
p[16] = new Node<Integer>(16, p[10]);
p[17] = new Node<Integer>(17, p[10]);
p[18] = new Node<Integer>(18, p[14]);
p[19] = new Node<Integer>(19, p[14]);
p[20] = new Node<Integer>(20, p[17]);
p[21] = new Node<Integer>(21, p[17]);
p[22] = new Node<Integer>(22, p[17]);
p[23] = new Node<Integer>(23, p[11]);
// make lca query
ArrayList<SearchSet<Integer>> q = new ArrayList<SearchSet<Integer>>();
q.add(new SearchSet<Integer>(p[15].getArgumet(), p[19].getArgumet()));
q.add(new SearchSet<Integer>(p[21].getArgumet(), p[16].getArgumet()));
q.add(new SearchSet<Integer>(p[14].getArgumet(), p[14].getArgumet()));
q.add(new SearchSet<Integer>(p[4].getArgumet(), p[23].getArgumet()));
q.add(new SearchSet<Integer>(p[23].getArgumet(), p[16].getArgumet()));
// lca
TarjansLCA<Integer> lca = new TarjansLCA<Integer>(null);
lca.lca(p[0], q);
// dump results
// for (SearchSet<Integer> item : q) {
// System.out.println(item.start + ":" + item.end + ": result is:"
// + item.result);
// }
Iterator<SearchSet<Integer>> it = q.iterator();
assertEquals(0, (int)it.next().result);
assertEquals(10, (int)it.next().result);
assertEquals(14, (int)it.next().result);
assertEquals(0, (int)it.next().result);
assertEquals(3, (int)it.next().result);
}
}