package com.acme.math; import church.lang.Array; import church.lang.Array.$CreateArray; import church.lang.ByteStream; import church.lang.JavaClasses.$Java_class; import church.lang.operators.Arithmetic.*; import church.lang.operators.Relational; import church.lang.operators.Relational.$$equal; import church.lang.operators.Relational.$$neq; import church.lang.operators.Streams.$$encode; import church.primitives.Integers; import church.primitives.Objects; import com.acme.math.Modular.$Canonical; import com.acme.math.Modular.$ExtendedEuclid; import static church.lang.operators.Streams.output; import static com.acme.math.Modular.modular; @SuppressWarnings("unchecked") public class ModularTest { private static final $$equal<Integer> $S0 = Integers::$equal; private static final $$neq<Integer> $S1 = Relational.$neq($S0); private static final $$rem<Integer> $S2 = Integers::$rem; private static final $Canonical<Integer> $S3 = Modular.canonical($S1, $S2); private static final $$prd<Integer, Integer> $S4 = Integers::$prd; private static final $$prd<Modular<Integer>, Modular<Integer>> $S5 = Modular.$prd($S3, $S4); private static final $$encode<ByteStream, String> $S6 = Objects::$encode; private static final $$encode<ByteStream, Integer> $S7 = Integers::$encode; private static final $$encode<ByteStream, Modular<Integer>> $S8 = Modular.$encode($S6, $S7); private static final $$equal<Modular<Integer>> $S9 = Modular.$equal($S0); private static final $Multiplicative_identity<Integer> $S10 = Integers::multiplicative_identity; private static final $Additive_identity<Integer> $S11 = Integers::additive_identity; private static final $Quotient<Integer> $S12 = Integers::quotient; private static final $Java_class<Integer> $S13 = () -> Integer.class; private static final $CreateArray<Integer> $S14 = Array.createArray($S13); private static final $$sub<Integer> $S15 = Integers::$sub; private static final $ExtendedEuclid<Integer> $S16 = Modular.extendedEuclid($S0, $S11, $S12, $S14, $S15, $S4); private static final $$rcp<Modular<Integer>> $S17 = Modular.$rcp($S10, $S11, $S16, $S1); public static void main(String[] args) { Modular<Integer> m1 = modular(10, 2); Modular<Integer> m2 = modular(10, 7); Modular<Integer> m3 = $S5.$prd(m1, m2); $S6.$encode($S8.$encode(output, m3), "\n"); assert $S9.$equal(m3, modular(10, 4)); Modular<Integer> m4 = $S17.$rcp(m2); $S6.$encode($S8.$encode(output, m4), "\n"); assert $S9.$equal(m4, modular(10, 3)); } }