blob: 9b2bbc522aa37d0a5fa3dcfe111fd3c2d52a1e0c [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python.toolbox;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* Tests basic FP stuff.
* User: dcheryasov
* Date: Nov 20, 2009 6:46:25 AM
*/
public class FPTest extends TestCase {
public void testMap() {
List<String> sequence = Arrays.asList("a", "b", "c");
FP.Lambda1<String, String> func = new FP.Lambda1<String, String>() {
@Override
public String apply(String arg) {
return arg.toUpperCase();
}
};
int count = 0;
for (String what : FP.map(func, sequence)) {
assertEquals(sequence.get(count).toUpperCase(), what);
count += 1;
}
assertEquals(sequence.size(), count);
}
public void testMapEmpty() {
List<String> sequence = Arrays.asList();
FP.Lambda1<String, String> func = new FP.Lambda1<String, String>() {
@Override
public String apply(String arg) {
return arg.toUpperCase();
}
};
int count = 0;
for (String what : FP.map(func, sequence)) {
count += 1; // this never happens
}
assertEquals(sequence.size(), count);
}
public void testMapLazy() {
List<Float> sequence = Arrays.asList(1.0f, 2.0f, 3.0f, 0.0f);
FP.Lambda1<Float, Float> func = new FP.Lambda1<Float, Float>() {
@Override
public Float apply(Float arg) {
return 1.0f/arg;
}
};
int count = 0;
Iterator<Float> iterator = FP.map(func, sequence).iterator();
while (iterator.hasNext() && count < 3) { // func is applied on the fly and will not be calculated for 4th arg
iterator.next();
count += 1;
}
assertEquals(3, count);
}
public void testFold() {
List<String> sequence = Arrays.asList("a", "b", "c");
FP.Lambda2<StringBuilder, String, StringBuilder> adder = new FP.Lambda2<StringBuilder, String, StringBuilder>() {
@Override
public StringBuilder apply(StringBuilder builder, String arg2) {
return builder.append(arg2);
}
};
StringBuilder result = FP.fold(adder, sequence, new StringBuilder());
assertEquals("abc", result.toString());
}
public void testFoldr() {
List<String> sequence = Arrays.asList("a", "b", "c");
FP.Lambda2<String, String, String> adder = new FP.Lambda2<String, String, String>() {
@Override
public String apply(String left, String right) {
return left + right;
}
};
String result = FP.foldr(adder, sequence, "");
assertEquals("cba", result);
}
}