1 | package com.github.dakusui.pcond.experimentals.currying; | |
2 | ||
3 | import com.github.dakusui.pcond.experimentals.currying.context.CurriedContext; | |
4 | import com.github.dakusui.pcond.experimentals.currying.context.CurriedContextUtils; | |
5 | import com.github.dakusui.pcond.core.printable.ParameterizedFunctionFactory; | |
6 | import com.github.dakusui.pcond.core.printable.ParameterizedPredicateFactory; | |
7 | import com.github.dakusui.pcond.core.printable.PrintablePredicateFactory; | |
8 | import com.github.dakusui.pcond.forms.Printables; | |
9 | ||
10 | import java.util.Collection; | |
11 | import java.util.function.Function; | |
12 | import java.util.function.Predicate; | |
13 | import java.util.stream.Stream; | |
14 | ||
15 | import static com.github.dakusui.pcond.internals.InternalUtils.formatObject; | |
16 | ||
17 | /** | |
18 | * A class that collects methods to create functions and predicates in experimental stage. | |
19 | */ | |
20 | public enum CurriedFunctions { | |
21 | ; | |
22 | ||
23 | /** | |
24 | * This function is used to construct a function which replaces 'nested loop' in a usual programming. | |
25 | * | |
26 | * @param inner A collection for the "inner loop". | |
27 | * @return A function to construct a nested structure. | |
28 | */ | |
29 | public static Function<Stream<?>, Stream<CurriedContext>> nest(Collection<?> inner) { | |
30 |
3
1. lambda$nest$0 : replaced return value with "" for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::lambda$nest$0 → KILLED 2. lambda$nest$1 : replaced return value with Stream.empty for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::lambda$nest$1 → KILLED 3. nest : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::nest → KILLED |
return Printables.function(() -> "nest" + formatObject(inner), (Stream<?> stream) -> CurriedContextUtils.nest(stream, inner)); |
31 | } | |
32 | ||
33 | /** | |
34 | * Returns a converter function for a stream. | |
35 | * The function converts a stream of objects into and returns a stream of contexts each of which hols a value | |
36 | * from the original stream. | |
37 | * | |
38 | * @return A function to convert an object stream into context stream. | |
39 | * @see CurriedContext | |
40 | */ | |
41 | public static Function<Stream<?>, Stream<CurriedContext>> toCurriedContextStream() { | |
42 |
2
1. lambda$toCurriedContextStream$2 : replaced return value with "" for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::lambda$toCurriedContextStream$2 → KILLED 2. toCurriedContextStream : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::toCurriedContextStream → KILLED |
return Printables.function(() -> "toCurriedContextStream", CurriedContextUtils::toCurriedContextStream); |
43 | } | |
44 | ||
45 | /** | |
46 | * Returns a function to convert a value into a context that holds the original value. | |
47 | * | |
48 | * @param <T> The type of the original value. | |
49 | * @return A function to convert a value into a context. | |
50 | */ | |
51 | public static <T> Function<T, CurriedContext> toCurriedContext() { | |
52 |
2
1. lambda$toCurriedContext$3 : replaced return value with "" for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::lambda$toCurriedContext$3 → KILLED 2. toCurriedContext : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::toCurriedContext → KILLED |
return Printables.function(() -> "toCurriedContext", CurriedContextUtils::toCurriedContext); |
53 | } | |
54 | ||
55 | /** | |
56 | * Creates a context function that tests the value at the specified index using the given predicate. | |
57 | * | |
58 | * @param predicate_ A predicate with which the value is tested. | |
59 | * @param argIndex An index to specify a value in the context. | |
60 | * @param <T> An expected type of value to be tested. | |
61 | * @return A new predicate to test a value in a context. | |
62 | */ | |
63 | public static <T> Predicate<CurriedContext> toCurriedContextPredicate(Predicate<T> predicate_, int argIndex) { | |
64 |
1
1. toCurriedContextPredicate : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::toCurriedContextPredicate → KILLED |
return PrintablePredicateFactory.variableBundlePredicate(predicate_, argIndex); |
65 | } | |
66 | ||
67 | /** | |
68 | * Converts a predicate to a context predicate which tests the first value in a context | |
69 | * using the `predicate`. | |
70 | * | |
71 | * @param predicate A predicate to be converted | |
72 | * @param <T> An expected type of the input value. | |
73 | * @return A context predicate. | |
74 | */ | |
75 | public static <T> Predicate<CurriedContext> toCurriedContextPredicate(Predicate<T> predicate) { | |
76 |
1
1. toCurriedContextPredicate : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::toCurriedContextPredicate → KILLED |
return toCurriedContextPredicate(predicate, 0); |
77 | } | |
78 | ||
79 | /** | |
80 | * Converts a curried function which results in a boolean value into a predicate. | |
81 | * | |
82 | * @param curriedFunction A curried function to be converted. | |
83 | * @param orderArgs An array to specify the order in which values in the context are applied to the function. | |
84 | * @return A predicate converted from the given curried function. | |
85 | */ | |
86 | public static Predicate<CurriedContext> toCurriedContextPredicate(CurriedFunction<Object, Object> curriedFunction, int... orderArgs) { | |
87 |
1
1. toCurriedContextPredicate : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::toCurriedContextPredicate → KILLED |
return CurriedContextUtils.toContextPredicate(curriedFunction, orderArgs); |
88 | } | |
89 | ||
90 | /** | |
91 | * Returns a builder for a factory to create a predicate. | |
92 | * The factory accepts an argument to create a new predicate. | |
93 | * With this method, you can create predicates with different values. | |
94 | * | |
95 | * Suppose, you are about to create a predicate that tests a given string starts with `"hello"`. | |
96 | * At the same time, you also want to create a predicate that checks the value using `"こんにちは"`. | |
97 | * You can do it with the factory built by the returned value of this method. | |
98 | * | |
99 | * @param name The name of the predicate. It will be followed by the value passed to the factory in the `pcond`'s output. | |
100 | * @param <T> The expected type of the value to be tested by the final predicate. | |
101 | * @return A builder to create a predicate factory. | |
102 | */ | |
103 | public static <T> ParameterizedPredicateFactory.Builder<T> parameterizedPredicate(String name) { | |
104 |
1
1. parameterizedPredicate : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::parameterizedPredicate → KILLED |
return new ParameterizedPredicateFactory.Builder<T>().name(name); |
105 | } | |
106 | ||
107 | /** | |
108 | * Returns a builder for a factory to create a function. | |
109 | * | |
110 | * @param name The name of the function. It will be followed by the value passed to the factory in the `pcond`'s output. | |
111 | * @param <T> The expected type of the input value to the final function. | |
112 | * @param <R> The expected type of the output value of the final function. | |
113 | * @return A builder to create a function factory. | |
114 | * @see CurriedFunctions#parameterizedPredicate(String) | |
115 | */ | |
116 | public static <T, R> ParameterizedFunctionFactory.Builder<T, R> parameterizedFunction(String name) { | |
117 |
1
1. parameterizedFunction : replaced return value with null for com/github/dakusui/pcond/experimentals/currying/CurriedFunctions::parameterizedFunction → KILLED |
return new ParameterizedFunctionFactory.Builder<T, R>().name(name); |
118 | } | |
119 | } | |
Mutations | ||
30 |
1.1 2.2 3.3 |
|
42 |
1.1 2.2 |
|
52 |
1.1 2.2 |
|
64 |
1.1 |
|
76 |
1.1 |
|
87 |
1.1 |
|
104 |
1.1 |
|
117 |
1.1 |