Nested Lists API

<<Back

Contents


About

The Nested Lists API is a generic Java library which simplifies functional programming for nested lists (i.e. the nested lists build a tree of the form [[...],...]).

Features

Project Links

Download:

Javadoc:

Discussion Forum:

View CVS:

Examples

JUnit testcase for some nested lists functions:

package org.matheclipse.generic.test.nested;

import java.util.Arrays;

import junit.framework.TestCase;

import org.matheclipse.generic.nested.Generating;
import org.matheclipse.generic.nested.IndexFunctionDiagonal;
import org.matheclipse.generic.nested.IndexTableGenerator;
import org.matheclipse.generic.nested.LevelSpec;
import org.matheclipse.generic.util.IElement;
import org.matheclipse.generic.util.IntegerElement;
import org.matheclipse.generic.util.NestedArrayList;
import org.matheclipse.generic.util.StringElement;

public class NestedArrayListTest extends TestCase {

	final StringElement a = new StringElement("a");

	final StringElement b = new StringElement("b");

	final StringElement c = new StringElement("c");

	final StringElement d = new StringElement("d");

	final StringElement e = new StringElement("e");

	final StringElement f = new StringElement("f");

	final StringElement g = new StringElement("g");

	final IntegerElement x0 = new IntegerElement(0);

	final IntegerElement x1 = new IntegerElement(1);

	final IntegerElement x2 = new IntegerElement(2);

	final IntegerElement x3 = new IntegerElement(3);

	final IntegerElement x4 = new IntegerElement(4);

	final IntegerElement x5 = new IntegerElement(5);

	final IntegerElement x6 = new IntegerElement(6);

	final IntegerElement x7 = new IntegerElement(7);

	final NestedArrayList<IElement> list = new NestedArrayList<IElement>(Arrays.asList(a, b, c));

	final NestedArrayList<IElement> list2;

	final NestedArrayList<IElement> list3 = new NestedArrayList<IElement>(Arrays.asList(d, e, f));

	final NestedArrayList<IElement> xlist = new NestedArrayList<IElement>(Arrays.asList(x1, x2, x3));

	final NestedArrayList<IElement> xlist2;

	final NestedArrayList<IElement> xlist3 = new NestedArrayList<IElement>(Arrays.asList(x4, x5, x6));

	public NestedArrayListTest() {
		super("NestedArrayListTest");
		list2 = NestedCopy.COPY_ELEMENT.clone(list);
		list.add(list2);
		list.add(list3);
		list.add(g);

		xlist2 = NestedCopy.COPY_ELEMENT.clone(xlist);
		xlist.add(xlist2);
		xlist.add(xlist3);
		xlist.add(x7);
	}

	@Override
	protected void setUp() throws Exception {
		super.setUp();
	}

	public void test001() {
		// check the initial string lists
		assertEquals("[a, b, c, [a, b, c], [d, e, f], g]", list.toString());
		assertEquals("[a, b, c]", list2.toString());

		// check the depth of the nested list
		assertEquals(3, NestedCopy.COPY_ELEMENT.depth(list, 1));

		final NestedArrayList<IElement> result = new NestedArrayList<IElement>(10);
		// add a "dummy element" at start of result list
		result.add(f);
		// get all elements of Level 2 from the list
		NestedCopy.COPY_ELEMENT.level(list, new LevelSpec(2), result);
		assertEquals("[f, a, b, c, d, e, f]", result.toString());
	}

	public void test002() {
		// check the initial integer lists
		assertEquals("[1, 2, 3, [1, 2, 3], [4, 5, 6], 7]", xlist.toString());
		assertEquals("[1, 2, 3]", xlist2.toString());
		// check the depth of the nested list
		assertEquals(3, NestedCopy.COPY_ELEMENT.depth(xlist, 1));

		final NestedArrayList<IElement> result = new NestedArrayList<IElement>(10);
		// add a "dummy element" at start of result list
		result.add(x6);
		// get all elements of Level 2 from the list
		NestedCopy.COPY_ELEMENT.level(xlist, new LevelSpec(2), result);
		assertEquals("[6, 1, 2, 3, 4, 5, 6]", result.toString());
	}

	public void test003() {
		int num = NestedCopy.COPY_ELEMENT.countIf(list, new StringEQa());
		assertEquals(2, num);

		num = NestedCopy.COPY_ELEMENT.countIf(list2, new StringEQa());
		assertEquals(1, num);
	}

	public void test004() {
		NestedArrayList<IElement> result1 = new NestedArrayList<IElement>();
		result1.add(a);
		boolean isEvaled = false;
		isEvaled = NestedCopy.COPY_ELEMENT.flatten(a, list, result1, 1);
		assertEquals("[a, b, c, b, c, [d, e, f], g]", result1.toString());

		NestedArrayList<IElement> result2 = new NestedArrayList<IElement>();
		isEvaled = NestedCopy.COPY_ELEMENT.flatten(list, result2, 0);
		assertEquals("[a, b, c, a, b, c, d, e, f, g]", result2.toString());
	}

	public void test005() {
		// 5x5 identity matrix generator
		final int[] indexArray = new int[2];
		indexArray[0] = 5;
		indexArray[1] = 5;
		final IElement[] valueArray = { x0, x1 };
		NestedArrayList<IElement> result = new NestedArrayList<IElement>();
		final IndexTableGenerator<IElement, NestedArrayList<IElement>> generator = new IndexTableGenerator<IElement, NestedArrayList<IElement>>(
				indexArray, result, new IndexFunctionDiagonal<IElement>(valueArray), NestedCopy.COPY_ELEMENT);
		final NestedArrayList<IElement> matrix = (NestedArrayList<IElement>) generator.table();
		assertEquals("[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]", matrix.toString());
	}

	public void test006() {
		final int[] indexArray = new int[2];
		indexArray[0] = 3;
		indexArray[1] = 4;
		final IElement[] valueArray = { a, b };
		NestedArrayList<IElement> result = new NestedArrayList<IElement>();
		final IndexTableGenerator<IElement, NestedArrayList<IElement>> generator = new IndexTableGenerator<IElement, NestedArrayList<IElement>>(
				indexArray, result, new IndexFunctionDiagonal<IElement>(valueArray), NestedCopy.COPY_ELEMENT);
		final NestedArrayList<IElement> matrix = (NestedArrayList<IElement>) generator.table();
		assertEquals("[[b, a, a, a], [a, b, a, a], [a, a, b, a]]", matrix.toString());
	}

	public void test007() {
		final int[] indexArray = new int[3];
		indexArray[0] = 3;
		indexArray[1] = 4;
		indexArray[2] = 5;
		final IElement[] valueArray = { a, b };
		NestedArrayList<IElement> result = new NestedArrayList<IElement>();
		final IndexTableGenerator<IElement, NestedArrayList<IElement>> generator = new IndexTableGenerator<IElement, NestedArrayList<IElement>>(
				indexArray, result, new IndexFunctionDiagonal<IElement>(valueArray), NestedCopy.COPY_ELEMENT);
		final NestedArrayList<IElement> matrix = (NestedArrayList<IElement>) generator.table();
		assertEquals(
				"[[[b, a, a, a, a], [a, a, a, a, a], [a, a, a, a, a], [a, a, a, a, a]], [[a, a, a, a, a], [a, b, a, a, a], [a, a, a, a, a], [a, a, a, a, a]], [[a, a, a, a, a], [a, a, a, a, a], [a, a, b, a, a], [a, a, a, a, a]]]",
				matrix.toString());
	}

	public void test008() {
		NestedArrayList<IElement> fList = new NestedArrayList<IElement>();
		fList.add(f);
		NestedArrayList<IElement> gList = new NestedArrayList<IElement>();
		gList.add(g);
		Generating<IElement, NestedArrayList<IElement>> gen = new Generating<IElement, NestedArrayList<IElement>>(fList, gList, 0,
				NestedCopy.COPY_ELEMENT);

		NestedArrayList<IElement> res = gen.outer(list2, xlist2);
		assertEquals(
				"[f, [f, [g, a, 1], [g, a, 2], [g, a, 3]], [f, [g, b, 1], [g, b, 2], [g, b, 3]], [f, [g, c, 1], [g, c, 2], [g, c, 3]]]",
				res.toString());
	}

}