#!/usr/bin/pugs

use v6;
use Test;

plan 14;

=pod

Checking Junctions' Associativeness

L<S09/"Junctions">

L<S03/"Junctive operators">

=cut

{ # L<S09/"Junctions">

    is('1 2 3', ~((1|2)|3).values, "Left-associative any, | operator");
    is('1 2 3', ~(1|(2|3)).values, "Right-associative any, | operator");

    is('1 2 3', ~any(any(1,2),3).values, "Left-associative any()");
    is('1 2 3', ~any(1,any(2,3)).values, "Right-associative any()");

    is('1 2 3', ~((1&2)&3).values, "Left-associative all, & operator");
    is('1 2 3', ~(1&(2&3)).values, "Right-associative all, & operator");

    is('1 2 3', ~all(all(1,2),3).values, "Left-associative all()");
    is('1 2 3', ~all(1,all(2,3)).values, "Right-associative all()");

    isnt('1 2 3', ~((1^2)^3).values, "Left-associative one, ^ operator");
    isnt('1 2 3', ~(1^(2^3)).values, "Right-associative one, ^ operator");

    isnt('1 2 3', ~one(one(1,2),3).values, "Left-associative one()");
    isnt('1 2 3', ~one(1,one(2,3)).values, "Right-associative one()");

    is('1 2 3', ~none(none(1,2),3).values, "Left-associative none()");
    is('1 2 3', ~none(1,none(2,3)).values, "Right-associative none()");

}
