View Javadoc

1   package io.atlassian.fugue.optic.law;
2   
3   import io.atlassian.fugue.law.IsEq;
4   import io.atlassian.fugue.optic.PSetter;
5   
6   import java.util.function.Function;
7   
8   import static io.atlassian.fugue.law.IsEq.isEq;
9   
10  public final class SetterLaws<S, A> {
11  
12    private final PSetter<S, S, A, A> setter;
13  
14    public SetterLaws(PSetter<S, S, A, A> setter) {
15      this.setter = setter;
16    }
17  
18    /**
19     * set idempotent
20     */
21    public IsEq<S> setIdempotent(S s, A a) {
22      return isEq(setter.set(a).apply(setter.set(a).apply(s)), setter.set(a).apply(s));
23    }
24  
25    /**
26     * modify id = id
27     */
28    public IsEq<S> modifyIdentity(S s) {
29      return isEq(setter.modify(Function.<A> identity()).apply(s), s);
30    }
31  
32  }