anchor.diff:      return newCache(futureLoader)
           .get(1)
           .then((value) => expect(value, '1', reason: 'get value should be loaded'));
  +  });
  +  test('load throwing value', () {
  +    return newCache(throwingLoader)
  +        .get(1)
  +        .catchError((exception) => exception)
  +        .then((value) => expect(value, isUnsupportedError));
     });
     test('load delayed value', () {
       return newCache(delayedLoader)
  
positive.code: 
  String immediateLoader(int key) => '$key';
  Future<String> futureLoader(int key) => new Future.value(immediateLoader(key));
  Future<String> delayedLoader(int key) =>
      new Future.delayed(const Duration(milliseconds: 10), () => immediateLoader(key));
  
  // Basic tests that should pass on any (stateless) cache.
  void statelessCacheTests(Cache<int, String> newCache(Loader<int, String> loader)) {
  
negative.code:         .then((_) => cache.get(1))
          .then((value) => expect(value, 'foo', reason: 'updated value'));
    });
    test('load throwing value has no side-effect', () {
      var cache = newCache(throwingLoader);
      return cache
          .get(1)
          .catchError((exception) => '1')
          .then((_) => cache.getIfPresent(1))
          .then((value) => expect(value, isNull, reason: 'loader threw exception'));
    });
    test('set and get', () {
      var cache = newCache(failingLoader);
      return cache
  