|  | @@ -223,25 +223,36 @@ public class ByteSizeValueTests extends AbstractWireSerializingTestCase<ByteSize
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    protected ByteSizeValue mutateInstance(ByteSizeValue instance) throws IOException {
 | 
	
		
			
				|  |  | -        long size = instance.getSize();
 | 
	
		
			
				|  |  | -        ByteSizeUnit unit = instance.getUnit();
 | 
	
		
			
				|  |  | +    protected ByteSizeValue mutateInstance(final ByteSizeValue instance) {
 | 
	
		
			
				|  |  | +        final long instanceSize = instance.getSize();
 | 
	
		
			
				|  |  | +        final ByteSizeUnit instanceUnit = instance.getUnit();
 | 
	
		
			
				|  |  | +        final long mutateSize;
 | 
	
		
			
				|  |  | +        final ByteSizeUnit mutateUnit;
 | 
	
		
			
				|  |  |          switch (between(0, 1)) {
 | 
	
		
			
				|  |  |          case 0:
 | 
	
		
			
				|  |  | -            long unitBytes = unit.toBytes(1);
 | 
	
		
			
				|  |  | -            size = randomValueOtherThan(size, () -> randomNonNegativeLong() / unitBytes);
 | 
	
		
			
				|  |  | +            final long unitBytes = instanceUnit.toBytes(1);
 | 
	
		
			
				|  |  | +            mutateSize = randomValueOtherThan(instanceSize, () -> randomNonNegativeLong() / unitBytes);
 | 
	
		
			
				|  |  | +            mutateUnit = instanceUnit;
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          case 1:
 | 
	
		
			
				|  |  | -            unit = randomValueOtherThan(unit, () -> randomFrom(ByteSizeUnit.values()));
 | 
	
		
			
				|  |  | -            long newUnitBytes = unit.toBytes(1);
 | 
	
		
			
				|  |  | -            if (size >= Long.MAX_VALUE / newUnitBytes) {
 | 
	
		
			
				|  |  | -                size = randomValueOtherThan(size, () -> randomNonNegativeLong() / newUnitBytes);
 | 
	
		
			
				|  |  | +            mutateUnit = randomValueOtherThan(instanceUnit, () -> randomFrom(ByteSizeUnit.values()));
 | 
	
		
			
				|  |  | +            final long newUnitBytes = mutateUnit.toBytes(1);
 | 
	
		
			
				|  |  | +            /*
 | 
	
		
			
				|  |  | +             * If size is zero we can not reuse zero because zero with any unit will be equal to zero with any other unit so in this case we
 | 
	
		
			
				|  |  | +             * need to randomize a new size. Additionally, if the size unit pair is such that the representation would be such that the
 | 
	
		
			
				|  |  | +             * number of represented bytes would exceed Long.Max_VALUE, we have to randomize a new size too.
 | 
	
		
			
				|  |  | +             */
 | 
	
		
			
				|  |  | +            if (instanceSize == 0 || instanceSize >= Long.MAX_VALUE / newUnitBytes) {
 | 
	
		
			
				|  |  | +                mutateSize = randomValueOtherThanMany(
 | 
	
		
			
				|  |  | +                        v -> v == instanceSize && v >= Long.MAX_VALUE / newUnitBytes, () -> randomNonNegativeLong() / newUnitBytes);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                mutateSize = instanceSize;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              break;
 | 
	
		
			
				|  |  |          default:
 | 
	
		
			
				|  |  |              throw new AssertionError("Invalid randomisation branch");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        return new ByteSizeValue(size, unit);
 | 
	
		
			
				|  |  | +        return new ByteSizeValue(mutateSize, mutateUnit);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParse() {
 |