@Test
	public void removeFromAPopulatedMatrix() {
		Context context = new Context();
		DataFactory factory = new DataFactory();
		IVPNumber a = factory.createIVPNumber();
		IVPNumber b = factory.createIVPNumber();
		IVPNumber c = factory.createIVPNumber();
		IVPNumber line = factory.createIVPNumber();
		IVPNumber column = factory.createIVPNumber();
		IVPMatrix matrix = factory.createIVPMatrix();
		IVPNumber size = factory.createIVPNumber();

		line.setValueType(IVPValue.INTEGER_TYPE);
		column.setValueType(IVPValue.INTEGER_TYPE);

		a.setValueType(IVPValue.INTEGER_TYPE);
		b.setValueType(IVPValue.INTEGER_TYPE);
		c.setValueType(IVPValue.INTEGER_TYPE);
		size.setValueType(IVPValue.INTEGER_TYPE);
		context.addInt(a.getUniqueID(), 3);
		context.addInt(b.getUniqueID(), 10);
		context.addInt(c.getUniqueID(), 2);
		context.addInt(size.getUniqueID(), 3);
		context.addInt(line.getUniqueID(), 0);
		context.addInt(column.getUniqueID(), 0);

		matrix.setSize(size.getUniqueID(), size.getUniqueID(), context);
		matrix.setType(IVPValue.INTEGER_TYPE);

		matrix.addElement(line.getUniqueID(), column.getUniqueID(), context, a.getUniqueID());
		line.updateIntegerValue(context, 1);
		column.updateIntegerValue(context, 1);
		matrix.addElement(line.getUniqueID(), column.getUniqueID(), context, b.getUniqueID());
		line.updateIntegerValue(context, 2);
		column.updateIntegerValue(context, 2);
		matrix.addElement(line.getUniqueID(), column.getUniqueID(), context, c.getUniqueID());

		HashMap map = new HashMap();
		map.put(a.getUniqueID(), a);
		map.put(b.getUniqueID(), b);
		map.put(c.getUniqueID(), c);
		map.put(matrix.getUniqueID(), matrix);
		map.put(line.getUniqueID(), line);
		map.put(column.getUniqueID(), column);

		assertTrue(matrix.getType().equals(IVPValue.INTEGER_TYPE));
		assertTrue(context.getInt(matrix.getNColID()) == 3);
		assertTrue(context.getInt(matrix.getNLinID()) == 3);
		assertFalse(context.getBoolean(matrix.isEmpty(factory, context, map)));

		line.updateIntegerValue(context, 0);
		column.updateIntegerValue(context, 0);
		IVPNumber result1 = (IVPNumber) map.get(matrix.getElement(line.getUniqueID(), column.getUniqueID(), context));
		line.updateIntegerValue(context, 1);
		column.updateIntegerValue(context, 1);
		IVPNumber result2 = (IVPNumber) map.get(matrix.getElement(line.getUniqueID(), column.getUniqueID(), context));
		line.updateIntegerValue(context, 2);
		column.updateIntegerValue(context, 2);
		IVPNumber result3 = (IVPNumber) map.get(matrix.getElement(line.getUniqueID(), column.getUniqueID(), context));

		assertTrue(context.getInt(result1.getUniqueID()) == 3);
		assertTrue(context.getInt(result2.getUniqueID()) == 10);
		assertTrue(context.getInt(result3.getUniqueID()) == 2);

		line.updateIntegerValue(context, 1);
		column.updateIntegerValue(context, 1);
		String removed = matrix.removeElement(line.getUniqueID(), column.getUniqueID(), context);

		assertTrue(removed.equals(b.getUniqueID()));
		assertTrue(matrix.getElement(line.getUniqueID(), column.getUniqueID(), context).equals(IVPValue.NULL));
	}