anchor.diff:        expect(input.children.first, input.children.last);
         expect(output.equals(target & target), isTrue);
         expect(output.children.first, output.children.last);
  +    });
  +    test('loop reference', () {
  +      var input = failure().setable().setable().setable();
  +      input.children.single.children.single.set(input);
  +      var output = transformParser(input, (parser) {
  +        return parser;
  +      });
  +      expect(input, isNot(output));
  +      expect(input.equals(output), isTrue);
  +      var inputs = allParser(input).toSet();
  +      var outputs = allParser(output).toSet();
  +      inputs.forEach((each) => expect(outputs.contains(each), isFalse));
  +      outputs.forEach((each) => expect(inputs.contains(each), isFalse));
       });
     });
     group('optimize', () {
  
positive.code:       expect(input.children.single, source);
        expect(output.children.single, target);
      });
      test('double reference', () {
        var source = lowercase();
        var input = source & source;
        var target = uppercase();
  
negative.code:       expect(input, source);
        expect(output, target);
      });
      test('single reference', () {
        var source = lowercase();
        var input = source.setable();
        var target = uppercase();
  