use utf8;
use 5.014;

use lib qw(../lib);
use Math::Bacovia qw(
  Log
  Exp
  Power
  Symbol
  Product
  Fraction
  );

my $x = Symbol('x');
my $y = Symbol('y');

say $x+ $y;    #=> Sum(Symbol("x"), Symbol("y"))
say $x- $y;    #=> Sum(Symbol("x"), Product(-1, Symbol("y")))
say $x* $y;    #=> Product(Symbol("x"), Symbol("y"))
say $x/ $y;    #=> Fraction(Symbol("x"), Symbol("y"))

say $x**$y;    #=> Power(Symbol("x"), Symbol("y"))

say Log($x);              #=> Log(Symbol("x"))
say Log($x) + Log($y);    #=> Log(Product(Symbol("x"), Symbol("y")))

say Exp($x);              #=> Exp(Symbol("x"))
say Exp($x) * Exp($y);    #=> Exp(Sum(Symbol("x"), Symbol("y")))

say "\n=> Sum:";
my $sum = Fraction(0, 1);

for my $n (1 .. 10) {
    $sum += Fraction(1, $n);
}
say $sum;                 #=> Fraction(10628640, 3628800)
say $sum->numeric;        #=> 7381/2520

say "\n=> Product:";
my $prod = Product();

for my $n (1 .. 3) {
    $prod *= Exp(Fraction(1, $n));
}

say $prod;                    #=> Product(Fraction(1, 1), Exp(Fraction(1, 1)), Exp(Fraction(1, 2)), Exp(Fraction(1, 3)))
say $prod->simple->pretty;    #=> exp(11/6)
say $prod->numeric;           #=> 6.25470095193632871640207...

say "\n=> Alternative representations:";
say join ', ', Power(3, 5)->alternatives(full => 1);    #=> Power(3, 5), Exp(Product(Log(3), 5))