anchor.diff:          .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
  
positive.code: 
  import 'package:more/cache.dart';
  import 'package:test/test.dart';
  
  // Various common loaders used with the tests.
  String failingLoader(int key) {
  
negative.code:     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)
  