@Override public DRes<SBool> known(boolean known) { return this.delegate.known(known); }
@Override public DRes<SBool> buildComputation(ProtocolBuilderBinary builder) { if (inB) { return inA; } else { return builder.binary().known(false); } } }
@Override public DRes<SBool> buildComputation(ProtocolBuilderBinary builder) { if (inB) { return builder.binary().known(true); } else { return inA; } } }
@Override public DRes<SBool> nand(DRes<SBool> left, boolean right) { if (right) { return builder.binary().not(left); } else { return builder.binary().known(true); } }
}).seq((seq, ors) -> { List<DRes<SBool>> xors = new ArrayList<>(); xors.add(seq.binary().xor(ors.get(0), seq.binary().known(false))); xors.add(seq.binary().known(false)); return () -> xors; }).seq((seq, xors) -> { List<DRes<SBool>> res = new ArrayList<>(); for (int j = 0; j < log2(number.size()) + 1; j++) { res.add(seq.binary().known(false)); DRes<SBool> tmp = seq.binary().and(xors.get(i), seq.binary().known(ithBit)); res.add(j, seq.binary().xor(tmp, res.remove(j)));
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { AdvancedBinary prov = seq.advancedBinary(); DRes<SBool> increment = seq.binary().known(true); List<DRes<SBool>> large = rawLarge.stream().map(seq.binary()::known).collect(Collectors.toList()); DRes<List<DRes<SBool>>> adder = prov.bitIncrement(large, increment); return adder; }).seq((seq, dat) -> { List<DRes<Boolean>> out = new ArrayList<>(); for (DRes<SBool> o : dat) { out.add(seq.binary().open(o)); } return () -> out.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outputs = runApplication(app); Assert.assertThat(ByteAndBitConverter.toHex(outputs), Is.is(expected)); Assert.assertThat(outputs.size(), Is.is(rawLarge.size() + 1)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder.open(builder.not(falseBool))); list.add(builder.open(builder.not(trueBool))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(true, outs.get(0)); Assert.assertEquals(false, outs.get(1)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { AdvancedBinary prov = seq.advancedBinary(); DRes<SBool> carry = seq.binary().known(true); List<DRes<SBool>> first = rawFirst.stream().map(seq.binary()::known).collect(Collectors.toList()); List<DRes<SBool>> second = rawSecond.stream().map(seq.binary()::known).collect(Collectors.toList()); DRes<List<DRes<SBool>>> adder = prov.fullAdder(first, second, carry); return adder; }).seq((seq, dat) -> { List<DRes<Boolean>> out = new ArrayList<>(); for (DRes<SBool> o : dat) { out.add(seq.binary().open(o)); } return () -> out.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outputs = runApplication(app); if (doAsserts) { Assert.assertThat(ByteAndBitConverter.toHex(outputs), Is.is(expected)); Assert.assertThat(outputs.size(), Is.is(rawFirst.size() + 1)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); DRes<SBool> inp200 = builder.binary().known(false); results.add(builder.binary().open(prov.xnor(inp100, inp200))); DRes<SBool> inp110 = builder.binary().known(true); DRes<SBool> inp210 = builder.binary().known(false); results.add(builder.binary().open(prov.xnor(inp110, inp210))); DRes<SBool> inp101 = builder.binary().known(false); DRes<SBool> inp201 = builder.binary().known(true); results.add(builder.binary().open(prov.xnor(inp101, inp201))); DRes<SBool> inp111 = builder.binary().known(true); DRes<SBool> inp211 = builder.binary().known(true); results.add(builder.binary().open(prov.xnor(inp111, inp211))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(true, res.get(0)); Assert.assertEquals(false, res.get(1)); Assert.assertEquals(false, res.get(2)); Assert.assertEquals(true, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); DRes<SBool> inp200 = builder.binary().known(false); results.add(builder.binary().open(prov.nand(inp100, inp200))); DRes<SBool> inp110 = builder.binary().known(true); DRes<SBool> inp210 = builder.binary().known(false); results.add(builder.binary().open(prov.nand(inp110, inp210))); DRes<SBool> inp101 = builder.binary().known(false); DRes<SBool> inp201 = builder.binary().known(true); results.add(builder.binary().open(prov.nand(inp101, inp201))); DRes<SBool> inp111 = builder.binary().known(true); DRes<SBool> inp211 = builder.binary().known(true); results.add(builder.binary().open(prov.nand(inp111, inp211))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(true, res.get(0)); Assert.assertEquals(true, res.get(1)); Assert.assertEquals(true, res.get(2)); Assert.assertEquals(false, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> xors = new ArrayList<>(); xors.add(builder.open(builder.xor(falseBool, falseBool))); xors.add(builder.open(builder.xor(trueBool, falseBool))); xors.add(builder.open(builder.xor(falseBool, trueBool))); xors.add(builder.open(builder.xor(trueBool, trueBool))); return () -> xors; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(false, outs.get(0)); Assert.assertEquals(true, outs.get(1)); Assert.assertEquals(true, outs.get(2)); Assert.assertEquals(false, outs.get(3)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder.open(builder.and(falseBool, falseBool))); list.add(builder.open(builder.and(trueBool, falseBool))); list.add(builder.open(builder.and(falseBool, trueBool))); list.add(builder.open(builder.and(trueBool, trueBool))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(false, outs.get(0)); Assert.assertEquals(false, outs.get(1)); Assert.assertEquals(false, outs.get(2)); Assert.assertEquals(true, outs.get(3)); } } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); DRes<SBool> inp200 = builder.binary().known(false); results.add(builder.binary().open(prov.or(inp100, inp200))); DRes<SBool> inp110 = builder.binary().known(true); DRes<SBool> inp210 = builder.binary().known(false); results.add(builder.binary().open(prov.or(inp110, inp210))); DRes<SBool> inp101 = builder.binary().known(false); DRes<SBool> inp201 = builder.binary().known(true); results.add(builder.binary().open(prov.or(inp101, inp201))); DRes<SBool> inp111 = builder.binary().known(true); DRes<SBool> inp211 = builder.binary().known(true); results.add(builder.binary().open(prov.or(inp111, inp211))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(false, res.get(0)); Assert.assertEquals(true, res.get(1)); Assert.assertEquals(true, res.get(2)); Assert.assertEquals(true, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); results.add(builder.binary().open(prov.and(inp100, false))); DRes<SBool> inp110 = builder.binary().known(true); results.add(builder.binary().open(prov.and(inp110, false))); DRes<SBool> inp101 = builder.binary().known(false); results.add(builder.binary().open(prov.and(inp101, true))); DRes<SBool> inp111 = builder.binary().known(true); results.add(builder.binary().open(prov.and(inp111, true))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(false, res.get(0)); Assert.assertEquals(false, res.get(1)); Assert.assertEquals(false, res.get(2)); Assert.assertEquals(true, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); results.add(builder.binary().open(prov.or(inp100, false))); DRes<SBool> inp110 = builder.binary().known(true); results.add(builder.binary().open(prov.or(inp110, false))); DRes<SBool> inp101 = builder.binary().known(false); results.add(builder.binary().open(prov.or(inp101, true))); DRes<SBool> inp111 = builder.binary().known(true); results.add(builder.binary().open(prov.or(inp111, true))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(false, res.get(0)); Assert.assertEquals(true, res.get(1)); Assert.assertEquals(true, res.get(2)); Assert.assertEquals(true, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); results.add(builder.binary().open(prov.xnor(inp100, false))); DRes<SBool> inp110 = builder.binary().known(true); results.add(builder.binary().open(prov.xnor(inp110, false))); DRes<SBool> inp101 = builder.binary().known(false); results.add(builder.binary().open(prov.xnor(inp101, true))); DRes<SBool> inp111 = builder.binary().known(true); results.add(builder.binary().open(prov.xnor(inp111, true))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(true, res.get(0)); Assert.assertEquals(false, res.get(1)); Assert.assertEquals(false, res.get(2)); Assert.assertEquals(true, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(builder -> { AdvancedBinary prov = builder.advancedBinary(); List<DRes<Boolean>> results = new ArrayList<>(); DRes<SBool> inp100 = builder.binary().known(false); results.add(builder.binary().open(prov.nand(inp100, false))); DRes<SBool> inp110 = builder.binary().known(true); results.add(builder.binary().open(prov.nand(inp110, false))); DRes<SBool> inp101 = builder.binary().known(false); results.add(builder.binary().open(prov.nand(inp101, true))); DRes<SBool> inp111 = builder.binary().known(true); results.add(builder.binary().open(prov.nand(inp111, true))); return () -> results; }).seq( (seq, results) -> () -> results.stream().map(DRes::out) .collect(Collectors.toList())); List<Boolean> res = runApplication(app); Assert.assertEquals(true, res.get(0)); Assert.assertEquals(true, res.get(1)); Assert.assertEquals(true, res.get(2)); Assert.assertEquals(false, res.get(3)); } };
@Override public void test() throws Exception { Application<List<Boolean>, ProtocolBuilderBinary> app = producer -> producer.seq(seq -> { Binary builder = seq.binary(); DRes<SBool> falseBool = builder.known(false); DRes<SBool> trueBool = builder.known(true); List<DRes<Boolean>> list = new ArrayList<>(); list.add(builder .open(builder.not(builder.and(builder.xor(falseBool, falseBool), falseBool)))); list.add(builder .open(builder.not(builder.and(builder.xor(falseBool, trueBool), falseBool)))); list.add( builder.open(builder.not(builder.and(builder.xor(trueBool, falseBool), trueBool)))); list.add( builder.open(builder.not(builder.and(builder.xor(trueBool, trueBool), trueBool)))); return () -> list; }).seq((seq, list) -> { return () -> list.stream().map(DRes::out).collect(Collectors.toList()); }); List<Boolean> outs = runApplication(app); if (doAsserts) { Assert.assertEquals(true, outs.get(0)); Assert.assertEquals(true, outs.get(1)); Assert.assertEquals(false, outs.get(2)); Assert.assertEquals(true, outs.get(3)); } } };