/*******************************************************************************
* Copyright (c) 2011-2014 Fernando Petrola
*
* This file is part of Dragome SDK.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
******************************************************************************/
package com.dragome.tests.lambda;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.BinaryOperator;
import java.util.function.Supplier;
import com.dragome.commons.compiler.annotations.CompilerType;
import com.dragome.commons.compiler.annotations.DragomeCompilerSettings;
import junit.framework.Assert;
import junit.framework.TestCase;
@DragomeCompilerSettings(CompilerType.Standard)
public class TestLambda1 extends TestCase
{
private int instanceVar= 0;
public void testLambda_using_instance_variables()
{
Runnable lambda= () -> {
instanceVar= 42;
};
lambda.run();
Assert.assertEquals(instanceVar, 42);
}
public void testLambda_using_local_variables()
{
int[] localVar= new int[1];
Runnable lambda= () -> {
localVar[0]= 43;
};
lambda.run();
Assert.assertEquals(localVar[0], 43);
}
public void testCreatingBinaryOperatorWithLambda()
{
BinaryOperator<Integer> sum= (v1, v2) -> v1 + v2;
Integer result= sum.apply(1, 2);
Assert.assertEquals(new Integer(3), result);
}
public void testLambaFromLambda()
{
FileFilter[] filters= new FileFilter[] { f -> f.exists(), f -> f.canRead(), f -> f.getName().startsWith("q") };
Supplier<Runnable> c= () -> () -> {
instanceVar= 80;
};
Runnable runnable= c.get();
runnable.run();
Assert.assertEquals(80, instanceVar);
}
public void testNoParametersMethodReferenceAsLambda()
{
String[] list= new String[] { "One", "Two", "Three", "Four", "Five", "Six" };
Comparator<String> upperComparator= Comparator.comparing(String::toUpperCase);
Arrays.sort(list, upperComparator);
Assert.assertEquals(list[0], "Five");
Assert.assertEquals(list[1], "Four");
Assert.assertEquals(list[2], "One");
Assert.assertEquals(list[3], "Six");
Assert.assertEquals(list[4], "Three");
Assert.assertEquals(list[5], "Two");
}
public void testUseTwoParametersMethodReferenceAsComparator()
{
String[] list= new String[] { "One", "Two", "Three", "Four", "Five", "Six" };
Arrays.sort(list, (a, b)->a.substring(1).compareTo(b.substring(1)));
Assert.assertEquals(list[0], "Three");
Assert.assertEquals(list[1], "Five");
Assert.assertEquals(list[2], "Six");
Assert.assertEquals(list[3], "One");
Assert.assertEquals(list[4], "Four");
Assert.assertEquals(list[5], "Two");
}
public static int compareFrom2(String a, String b)
{
return a.substring(1).compareTo(b.substring(1));
}
}