anchor.diff:  import 'package:vdom_benchmark/benchmark.dart';
   import 'package:vdom_benchmark/generator.dart' as g;
   import 'package:vdom/vdom.dart' as v;
  -import 'package:liquid/liquid.dart' as l;
  +import 'package:liquid/liquid.dart';
   
  -class NodeComponent extends l.VComponent {
  +class NodeComponent extends VComponent {
     g.Node _node;
   
  -  NodeComponent(l.ComponentBase parent, this._node) :
  +  NodeComponent(ComponentBase parent, this._node) :
       super(parent, new html.DivElement());
  -
  -  void updateProperties(g.Node node) {
  -    _node = node;
  -    if (_node.dirty) {
  -      invalidate();
  -    }
  -  }
  -
  -  /// Should be auto-generated by pub transformer
  -  static l.VComponentElement virtual(Object key, l.ComponentBase parent, g.Node node) {
  -    return new l.VComponentElement(key, (component) {
  -      if (component == null) {
  -        return new NodeComponent(parent, node);
  -      } else {
  -        component.updateProperties(node);
  -        return component;
  -      }
  -    });
  -  }
   
     List<v.Node> build() {
       final result = [];
  
positive.code:     return result;
    }
  
    String toString() => 'Node: [$_node]';
  }
  
  class LeafComponent extends l.VComponent {
    g.Node _node;
  
    LeafComponent(l.ComponentBase parent, this._node) : super(parent, new html.SpanElement());
  
    void updateProperties(g.Node node) {
      _node = node;
  
negative.code:   String toString() => 'Leaf: [${_node.key}]';
  }
  
  class App extends VComponent {
    List<g.Node> _nodes;
  
    set node(List<g.Node> newNodes) {
      _nodes = newNodes;
      invalidate();
    }
  
    App(ComponentBase parent, this._nodes) : super(parent, new html.DivElement());
  
    List<v.Node> build() {
      return [NodeComponent.virtual(0, this, new g.Node(0, true, _nodes))];
    }
  }
  
  
  class Benchmark extends BenchmarkBase {
    List<g.Node> a;
    List<g.Node> b;
    html.Element _container;
  
    UpdateLoop _updateLoop;
    RootComponent _root;
  
    App _app;
    html.Element _element;
  
    Benchmark(this.a, this.b, this._container) : super('VComponent');
  
    void render() {
      _app = new App(_root, a);
      _root.injectComponent(_app, _container);
    }
  
    void update() {
      _app.node = b;
      _root.update();
    }
  
    void setup() {
      _updateLoop = new UpdateLoop();
      _root = new RootComponent(_updateLoop);
    }
  
    void teardown() {
      _container.children.clear();
    }
  }