@Override public DRes<List<List<DRes<SBool>>>> buildComputation(ProtocolBuilderBinary builder) { return builder.seq(seq -> { return seq.comparison().greaterThan(right, left); }).par((par, data) -> { List<DRes<SBool>> first = left.stream() .map(e -> {return par.advancedBinary().condSelect(data, e, right.get(left.indexOf(e)));}) .collect(Collectors.toList()); List<DRes<SBool>> second = right.stream() .map(e -> {return par.advancedBinary().condSelect(data, e, left.get(right.indexOf(e)));}) .collect(Collectors.toList()); List<List<DRes<SBool>>> result = new ArrayList<List<DRes<SBool>>>(); result.add(first); result.add(second); return () -> result; }); } }
return builder.par(seq -> { DRes<SBool> comparison = seq.comparison().greaterThan(leftKey, rightKey); xorKey = leftKey.stream().map(e -> seq.binary().xor(e, rightKey.get(leftKey.indexOf(e)))) .collect(Collectors.toList());
@Override public void test() throws Exception { Boolean[] comp1 = new Boolean[] {false, true, false, true, false}; Boolean[] comp2 = new Boolean[] {false, true, true, true, false}; Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { List<DRes<SBool>> in1 = BooleanHelper.known(comp1, seq.binary()); List<DRes<SBool>> in2 = BooleanHelper.known(comp2, seq.binary()); DRes<SBool> res1 = seq.comparison().greaterThan(in1, in2); DRes<SBool> res2 = seq.comparison().greaterThan(in2, in1); DRes<Boolean> open1 = seq.binary().open(res1); DRes<Boolean> open2 = seq.binary().open(res2); return () -> Arrays.asList(open1, open2); }).seq( (seq, opened) -> () -> opened.stream().map(DRes::out).collect(Collectors.toList())); List<Boolean> res = runApplication(app); if (doAsserts) { Assert.assertEquals(false, res.get(0)); Assert.assertEquals(true, res.get(1)); } } };
@Override public void test() throws Exception { Boolean[] comp1 = new Boolean[] {false, true, false, true, false}; Boolean[] comp2 = new Boolean[] {false, true, true}; Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { List<DRes<SBool>> in1 = BooleanHelper.known(comp1, seq.binary()); List<DRes<SBool>> in2 = BooleanHelper.known(comp2, seq.binary()); DRes<SBool> res1 = seq.comparison().greaterThan(in1, in2); DRes<Boolean> open1 = seq.binary().open(res1); return () -> Collections.singletonList(open1); }).seq( (seq, opened) -> () -> opened.stream().map(DRes::out).collect(Collectors.toList())); try { runApplication(app); } catch (Exception e) { if (!(e.getCause() instanceof IllegalArgumentException)) { throw e; } } } };
@Override public void test() throws Exception { Boolean[] comp1 = new Boolean[] {false, true, false, true, false}; Boolean[] comp2 = new Boolean[] {false, true, true, true, false}; Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { List<DRes<SBool>> in1 = BooleanHelper.known(comp1, seq.binary()); List<DRes<SBool>> in2 = BooleanHelper.known(comp2, seq.binary()); DRes<SBool> res1 = seq.comparison().equal(in1, in2); DRes<SBool> res2 = seq.comparison().equal(in1, in1); DRes<Boolean> open1 = seq.binary().open(res1); DRes<Boolean> open2 = seq.binary().open(res2); return () -> Arrays.asList(open1, open2); }).seq( (seq, opened) -> () -> opened.stream().map(DRes::out).collect(Collectors.toList())); List<Boolean> res = runApplication(app); if (doAsserts) { Assert.assertEquals(false, res.get(0)); Assert.assertEquals(true, res.get(1)); } } };