package com.acme.math; import church.lang.ByteStream; import church.lang.operators.Arithmetic; import church.lang.operators.Arithmetic.*; import church.lang.operators.Relational.$$equal; import church.lang.operators.Streams.$$encode; import church.math.Fraction; import church.math.Fraction.$Canonical; import church.primitives.Integers; import church.primitives.Objects; import static church.lang.operators.Streams.output; import static church.math.Fraction.fraction; @SuppressWarnings("unchecked") public class RationalIntegerTest { private static final $$neg<Integer> $S0 = Integers::$neg; private static final $$neg<Fraction<Integer>> $S1 = Fraction.$neg($S0); private static final $$prd<Integer, Integer> $S2 = Integers::$prd; private static final $Sign<Integer> $S3 = Integers::sign; private static final $Gcd<Integer> $S4 = Integers::gcd; private static final $$dof<Integer> $S5 = Integers::$dof; private static final $Canonical<Integer> $S6 = Fraction.canonical($S2, $S3, $S4, $S5); private static final $$sum<Integer> $S7 = Integers::$sum; private static final $$sum<Fraction<Integer>> $S8 = Fraction.$sum($S6, $S7, $S2); private static final $$sub<Fraction<Integer>> $S9 = Arithmetic.$sub($S8, $S1); private static final $$prd<Fraction<Integer>, Fraction<Integer>> $S10 = Fraction.$prd($S6, $S2); private static final $$encode<ByteStream, String> $S11 = Objects::$encode; private static final $$equal<Integer> $S12 = Integers::$equal; private static final $Multiplicative_identity<Integer> $S13 = Integers::multiplicative_identity; private static final $$encode<ByteStream, Integer> $S14 = Integers::$encode; private static final $$encode<ByteStream, Fraction<Integer>> $S15 = Fraction.$encode($S12, $S13, $S14, $S11); private static final $$equal<Fraction<Integer>> $S16 = Fraction.$equal($S12); public static void main(String[] args) { Fraction<Integer> r1 = fraction(1, 2); Fraction<Integer> r2 = fraction(3, 4); Fraction<Integer> r3 = $S1.$neg(r1); Fraction<Integer> r4 = $S9.$sub($S8.$sum(r1, $S10.$prd(r2, r3)), r3); $S11.$encode($S15.$encode(output, r4), "\n"); assert $S16.$equal(r4, fraction(5, 8)); } }