private void TestCollectionCore(
            Action <NilImplicationCollectionTestTarget> adjuster,
            Action <Packer, List <int>, List <int>, List <int> > packing,
            Func <List <int> > memberDefault = null,
            Func <List <int> > @null         = null,
            Func <List <int> > prohibit      = null
            )
        {
            using (var buffer = new MemoryStream())
                using (var packer = Packer.Create(buffer))
                {
                    var serializer = MessagePackSerializer.Create <NilImplicationCollectionTestTarget>(this.CreateSerializationContext());
                    var target     = new NilImplicationCollectionTestTarget();

                    if (adjuster != null)
                    {
                        adjuster(target);
                    }

                    packing(
                        packer,
                        memberDefault != null ? memberDefault() : target.MemberDefault,
                        @null != null ? @null() : target.Null,
                        prohibit != null ? prohibit() : target.Prohibit
                        );

                    buffer.Position = 0;

                    var result = serializer.Unpack(buffer);
                    Assert.That(result.MemberDefault, Is.EqualTo(target.MemberDefault));
                    Assert.That(result.Null, Is.EqualTo(target.Null));
                    Assert.That(result.Prohibit, Is.EqualTo(target.Prohibit));

                    var expectedBytes = buffer.ToArray();
                    using (var actual = new MemoryStream())
                    {
                        serializer.Pack(actual, target);
                    }
                }
        }
		private void TestCollectionCore(
			Action<NilImplicationCollectionTestTarget> adjuster,
			Action<Packer, List<int>, List<int>, List<int>> packing,
			Func<List<int>> memberDefault = null,
			Func<List<int>> @null = null,
			Func<List<int>> prohibit = null
		)
		{
			using ( var buffer = new MemoryStream() )
			using ( var packer = Packer.Create( buffer ) )
			{
				var serializer = MessagePackSerializer.Create<NilImplicationCollectionTestTarget>( this.CreateSerializationContext() );
				var target = new NilImplicationCollectionTestTarget();

				if ( adjuster != null )
				{
					adjuster( target );
				}

				packing(
					packer,
					memberDefault != null ? memberDefault() : target.MemberDefault,
					@null != null ? @null() : target.Null,
					prohibit != null ? prohibit() : target.Prohibit
				);

				buffer.Position = 0;

				var result = serializer.Unpack( buffer );
				Assert.That( result.MemberDefault, Is.EqualTo( target.MemberDefault ) );
				Assert.That( result.Null, Is.EqualTo( target.Null ) );
				Assert.That( result.Prohibit, Is.EqualTo( target.Prohibit ) );

				var expectedBytes = buffer.ToArray();
				using ( var actual = new MemoryStream() )
				{
					serializer.Pack( actual, target );
				}
			}
		}