diff --git a/AsyncDisplayKit/Private/ASStackUnpositionedLayout.mm b/AsyncDisplayKit/Private/ASStackUnpositionedLayout.mm index 395c2a2b8b..ec72e49695 100644 --- a/AsyncDisplayKit/Private/ASStackUnpositionedLayout.mm +++ b/AsyncDisplayKit/Private/ASStackUnpositionedLayout.mm @@ -131,8 +131,8 @@ static const CGFloat kViolationEpsilon = 0.01; */ static std::function flexFactorInViolationDirection(const CGFloat violation) { - if (fabs(violation) < kViolationEpsilon) { - return [](const ASStackUnpositionedItem &item) { return 0; }; + if (std::fabs(violation) < kViolationEpsilon) { + return [](const ASStackUnpositionedItem &item) { return 0.0; }; } else if (violation > 0) { return [](const ASStackUnpositionedItem &item) { return item.child.style.flexGrow; }; } else { @@ -140,9 +140,11 @@ static std::function flexFactorInViola } } -static inline CGFloat scaledFlexShrinkFactor(const ASStackUnpositionedItem &item, const ASStackLayoutSpecStyle &style) +static inline CGFloat scaledFlexShrinkFactor(const ASStackUnpositionedItem &item, + const ASStackLayoutSpecStyle &style, + const CGFloat flexFactorSum) { - return stackDimension(style.direction, item.layout.size) * item.child.style.flexShrink; + return stackDimension(style.direction, item.layout.size) * (item.child.style.flexShrink / flexFactorSum); } /** @@ -150,20 +152,22 @@ static inline CGFloat scaledFlexShrinkFactor(const ASStackUnpositionedItem &item @param items The unpositioned items from the original unconstrained layout pass. @param style The layout style to be applied to all children. @param violation The amount that the stack layout violates its size range. + @param flexFactorSum The sum of each item's flex factor as determined by the provided violation. @return A lambda capable of computing the flex shrink adjustment, if any, for a particular item. */ -static std::function flexShrinkAdjustment(const std::vector &items, - const ASStackLayoutSpecStyle &style, - const CGFloat violation) +static std::function flexShrinkAdjustment(const std::vector &items, + const ASStackLayoutSpecStyle &style, + const CGFloat violation, + const CGFloat flexFactorSum) { - const CGFloat scaledFlexShrinkFactorSum = std::accumulate(items.begin(), items.end(), 0, [&](CGFloat x, const ASStackUnpositionedItem &item) { - return x + scaledFlexShrinkFactor(item, style); + const CGFloat scaledFlexShrinkFactorSum = std::accumulate(items.begin(), items.end(), 0.0, [&](CGFloat x, const ASStackUnpositionedItem &item) { + return x + scaledFlexShrinkFactor(item, style, flexFactorSum); }); - return [style, scaledFlexShrinkFactorSum, violation](const ASStackUnpositionedItem &item, BOOL isFirstFlex) { - const CGFloat scaledFlexShrinkFactorRatio = scaledFlexShrinkFactor(item, style) / scaledFlexShrinkFactorSum; + return [style, scaledFlexShrinkFactorSum, violation, flexFactorSum](const ASStackUnpositionedItem &item) { + const CGFloat scaledFlexShrinkFactorRatio = scaledFlexShrinkFactor(item, style, flexFactorSum) / scaledFlexShrinkFactorSum; // The item should shrink proportionally to the scaled flex shrink factor ratio computed above. // Unlike the flex grow adjustment the flex shrink adjustment needs to take the size of each item into account. - return -fabs(scaledFlexShrinkFactorRatio * violation); + return -std::fabs(scaledFlexShrinkFactorRatio * violation); }; } @@ -174,17 +178,13 @@ static std::function flexShrinkA @param flexFactorSum The sum of each item's flex factor as determined by the provided violation. @return A lambda capable of computing the flex grow adjustment, if any, for a particular item. */ -static std::function flexGrowAdjustment(const std::vector &items, - const CGFloat violation, - const CGFloat flexFactorSum) +static std::function flexGrowAdjustment(const std::vector &items, + const CGFloat violation, + const CGFloat flexFactorSum) { - const CGFloat violationPerFlexFactor = floorf(violation / flexFactorSum); - const CGFloat remainingViolation = violation - (violationPerFlexFactor * flexFactorSum); // To compute the flex grow adjustment distribute the violation proportionally based on each item's flex grow factor. - // If there happens to be a violation remaining make sure it is allocated to the first flexible child. - return [violationPerFlexFactor, remainingViolation](const ASStackUnpositionedItem &item, BOOL isFirstFlex) { - // Only apply the remaining violation for the first flexible child that has a flex grow factor. - return violationPerFlexFactor * item.child.style.flexGrow + (isFirstFlex && item.child.style.flexGrow > 0 ? remainingViolation : 0); + return [violation, flexFactorSum](const ASStackUnpositionedItem &item) { + return std::floor(violation * (item.child.style.flexGrow / flexFactorSum)); }; } @@ -196,15 +196,15 @@ static std::function flexGrowAdj @param flexFactorSum The sum of each item's flex factor as determined by the provided violation. @return A lambda capable of computing the flex adjustment for a particular item. */ -static std::function flexAdjustmentInViolationDirection(const std::vector &items, - const ASStackLayoutSpecStyle &style, - const CGFloat violation, - const CGFloat flexFactorSum) +static std::function flexAdjustmentInViolationDirection(const std::vector &items, + const ASStackLayoutSpecStyle &style, + const CGFloat violation, + const CGFloat flexFactorSum) { if (violation > 0) { return flexGrowAdjustment(items, violation, flexFactorSum); } else { - return flexShrinkAdjustment(items, style, violation); + return flexShrinkAdjustment(items, style, violation, flexFactorSum); } } @@ -352,7 +352,7 @@ static void flexChildrenAlongStackDimension(std::vector std::function flexFactor = flexFactorInViolationDirection(violation); // The flex factor sum is needed to determine if flexing is necessary. // This value is also needed if the violation is positive and flexible children need to grow, so keep it around. - const CGFloat flexFactorSum = std::accumulate(items.begin(), items.end(), 0, [&](CGFloat x, const ASStackUnpositionedItem &item) { + const CGFloat flexFactorSum = std::accumulate(items.begin(), items.end(), 0.0, [&](CGFloat x, const ASStackUnpositionedItem &item) { return x + flexFactor(item); }); // If no children are able to flex then there is nothing left to do. Bail. @@ -363,17 +363,23 @@ static void flexChildrenAlongStackDimension(std::vector } return; } - std::function flexAdjustment = flexAdjustmentInViolationDirection(items, - style, - violation, - flexFactorSum); + std::function flexAdjustment = flexAdjustmentInViolationDirection(items, + style, + violation, + flexFactorSum); + + // Compute any remaining violation to the first flexible child. + const CGFloat remainingViolation = std::accumulate(items.begin(), items.end(), violation, [&](CGFloat x, const ASStackUnpositionedItem &item) { + return x - flexAdjustment(item); + }); BOOL isFirstFlex = YES; for (ASStackUnpositionedItem &item : items) { - const CGFloat currentFlexAdjustment = flexAdjustment(item, isFirstFlex); + const CGFloat currentFlexAdjustment = flexAdjustment(item); // Children are consider inflexible if they do not need to make a flex adjustment. if (currentFlexAdjustment != 0) { const CGFloat originalStackSize = stackDimension(style.direction, item.layout.size); - const CGFloat flexedStackSize = originalStackSize + currentFlexAdjustment; + // Only apply the remaining violation for the first flexible child that has a flex grow factor. + const CGFloat flexedStackSize = originalStackSize + currentFlexAdjustment + (isFirstFlex && item.child.style.flexGrow > 0 ? remainingViolation : 0); item.layout = crossChildLayout(item.child, style, MAX(flexedStackSize, 0), diff --git a/AsyncDisplayKitTests/ASStackLayoutSpecSnapshotTests.mm b/AsyncDisplayKitTests/ASStackLayoutSpecSnapshotTests.mm index 9a1771c7c8..a23edd0ff9 100644 --- a/AsyncDisplayKitTests/ASStackLayoutSpecSnapshotTests.mm +++ b/AsyncDisplayKitTests/ASStackLayoutSpecSnapshotTests.mm @@ -21,6 +21,15 @@ @implementation ASStackLayoutSpecSnapshotTests +#pragma mark - XCTestCase + +- (void)setUp +{ + [super setUp]; + + self.recordMode = NO; +} + #pragma mark - Utility methods static NSArray *defaultSubnodes() @@ -597,13 +606,13 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testLayoutSpec:layoutSpec sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testPositiveViolationIsDistributedEquallyAmongFlexibleChildren +- (void)testPositiveViolationIsDistributedEqually { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); - subnodes[0].style.flexGrow = 0; - subnodes[2].style.flexGrow = 0; + subnodes[0].style.flexGrow = 1; + subnodes[2].style.flexGrow = 1; // In this scenario a width of 350 results in a positive violation of 200. // Due to each flexible subnode specifying a flex grow factor of 1 the violation will be distributed evenly. @@ -611,7 +620,21 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testPositiveViolationIsDistributedProportionallyAmongFlexibleChildren +- (void)testPositiveViolationIsDistributedEquallyWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; + + NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); + subnodes[0].style.flexGrow = 0.5; + subnodes[2].style.flexGrow = 0.5; + + // In this scenario a width of 350 results in a positive violation of 200. + // Due to each flexible child component specifying a flex grow factor of 0.5 the violation will be distributed evenly. + static ASSizeRange kSize = {{350, 350}, {350, 350}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testPositiveViolationIsDistributedProportionally { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; @@ -627,7 +650,23 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testPositiveViolationIsDistributedEquallyAmongGrowingAndShrinkingFlexibleChildren +- (void)testPositiveViolationIsDistributedProportionallyWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; + + NSArray *subnodes = defaultSubnodesWithSameSize({50, 50}, 0); + subnodes[0].style.flexGrow = 0.25; + subnodes[1].style.flexGrow = 0.50; + subnodes[2].style.flexGrow = 0.25; + + // In this scenario a width of 350 results in a positive violation of 200. + // The first and third child components specify a flex grow factor of 0.25 and will flex by 50. + // The second child component specifies a flex grow factor of 0.25 and will flex by 100. + static ASSizeRange kSize = {{350, 350}, {350, 350}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testPositiveViolationIsDistributedEquallyAmongMixedChildren { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; @@ -647,7 +686,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testPositiveViolationIsDistributedProportionallyAmongGrowingAndShrinkingFlexibleChildren +- (void)testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; + + const CGSize kSubnodeSize = {50, 50}; + NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); + subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; + + subnodes[0].style.flexShrink = 1.0; + subnodes[1].style.flexGrow = 0.5; + subnodes[2].style.flexShrink = 0.0; + subnodes[3].style.flexGrow = 0.5; + + // In this scenario a width of 400 results in a positive violation of 200. + // The first and third child components specify a flex shrink factor of 1 and 0, respectively. They won't flex. + // The second and fourth child components specify a flex grow factor of 0.5 and will flex by 100. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testPositiveViolationIsDistributedProportionallyAmongMixedChildren { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; @@ -668,6 +727,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } +- (void)testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; + + const CGSize kSubnodeSize = {50, 50}; + NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); + subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; + + subnodes[0].style.flexShrink = 1.0; + subnodes[1].style.flexGrow = 0.75; + subnodes[2].style.flexShrink = 0.0; + subnodes[3].style.flexGrow = 0.25; + + // In this scenario a width of 400 results in a positive violation of 200. + // The first and third child components specify a flex shrink factor of 1 and 0, respectively. They won't flex. + // The second child component specifies a flex grow factor of 0.75 and will flex by 150. + // The fourth child component specifies a flex grow factor of 0.25 and will flex by 50. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + - (void)testRemainingViolationIsAppliedProperlyToFirstFlexibleChild { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; @@ -688,7 +768,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongFlexibleChildren +- (void)testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; + + NSArray *subnodes = @[ + ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 25}), + ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 0}), + ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 100}) + ]; + + subnodes[0].style.flexGrow = 0.0; + subnodes[1].style.flexGrow = 0.5; + subnodes[2].style.flexGrow = 0.5; + + // In this scenario a width of 300 results in a positive violation of 175. + // The second and third child components specify a flex grow factor of 0.5 and will flex by 88 and 87, respectively. + static ASSizeRange kSize = {{300, 300}, {300, 300}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testNegativeViolationIsDistributedBasedOnSize { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; @@ -708,7 +808,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongFlexibleChildren +- (void)testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; + + NSArray *subnodes = @[ + ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), + ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), + ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) + ]; + + subnodes[0].style.flexShrink = 0.5; + subnodes[1].style.flexShrink = 0.0; + subnodes[2].style.flexShrink = 0.5; + + // In this scenario a width of 400 results in a negative violation of 200. + // The first and third child components specify a flex shrink factor of 0.5 and will flex by -120 and -80, respectively. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; @@ -729,7 +849,28 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongGrowingAndShrinkingFlexibleChildren +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; + + NSArray *subnodes = @[ + ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 300}), + ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), + ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 200}) + ]; + + subnodes[0].style.flexShrink = 0.4; + subnodes[1].style.flexShrink = 0.2; + subnodes[2].style.flexShrink = 0.4; + + // In this scenario a width of 400 results in a negative violation of 200. + // The first and third child components specify a flex shrink factor of 0.4 and will flex by -109 and -72, respectively. + // The second child component specifies a flex shrink factor of 0.2 and will flex by -18. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; @@ -749,7 +890,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongGrowingAndShrinkingFlexibleChildren +- (void)testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; + + const CGSize kSubnodeSize = {150, 50}; + NSArray *subnodes = defaultSubnodesWithSameSize(kSubnodeSize, 0); + subnodes = [subnodes arrayByAddingObject:ASDisplayNodeWithBackgroundColor([UIColor yellowColor], kSubnodeSize)]; + + subnodes[0].style.flexGrow = 1.0; + subnodes[1].style.flexShrink = 0.5; + subnodes[2].style.flexGrow = 0.0; + subnodes[3].style.flexShrink = 0.5; + + // In this scenario a width of 400 results in a negative violation of 200. + // The first and third child components specify a flex grow factor of 1 and 0, respectively. They won't flex. + // The second and fourth child components specify a flex shrink factor of 0.5 and will flex by -100. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; @@ -773,7 +934,31 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } -- (void)testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWidth +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionVertical}; + + NSArray *subnodes = @[ + ASDisplayNodeWithBackgroundColor([UIColor greenColor], {50, 150}), + ASDisplayNodeWithBackgroundColor([UIColor blueColor], {50, 100}), + ASDisplayNodeWithBackgroundColor([UIColor redColor], {50, 150}), + ASDisplayNodeWithBackgroundColor([UIColor yellowColor], {50, 200}) + ]; + + subnodes[0].style.flexGrow = 1.0; + subnodes[1].style.flexShrink = 0.25; + subnodes[2].style.flexGrow = 0.0; + subnodes[3].style.flexShrink = 0.75; + + // In this scenario a width of 400 results in a negative violation of 200. + // The first and third child components specify a flex grow factor of 1 and 0, respectively. They won't flex. + // The second child component specifies a flex shrink factor of 0.25 and will flex by -28. + // The fourth child component specifies a flex shrink factor of 0.75 and will flex by -171. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero { ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; @@ -794,6 +979,27 @@ static void setCGSizeToNode(CGSize size, ASDisplayNode *node) [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; } +- (void)testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats +{ + ASStackLayoutSpecStyle style = {.direction = ASStackLayoutDirectionHorizontal}; + + NSArray *subnodes = @[ + ASDisplayNodeWithBackgroundColor([UIColor greenColor], {300, 50}), + ASDisplayNodeWithBackgroundColor([UIColor blueColor], {100, 50}), + ASDisplayNodeWithBackgroundColor([UIColor redColor], {200, 50}) + ]; + + subnodes[0].style.flexShrink = 0.25; + subnodes[1].style.flexShrink = 0.50; + subnodes[2].style.flexShrink = 0.25; + + // In this scenario a width of 400 results in a negative violation of 200. + // The first and third child components specify a flex shrink factor of 0.25 and will flex by 50. + // The second child component specifies a flex shrink factor of 0.50 and will flex by -57. It will have a width of 43. + static ASSizeRange kSize = {{400, 400}, {400, 400}}; + [self testStackLayoutSpecWithStyle:style sizeRange:kSize subnodes:subnodes identifier:nil]; +} + - (void)testNestedStackLayoutStretchDoesNotViolateWidth { ASStackLayoutSpec *stackLayoutSpec = [[ASStackLayoutSpec alloc] init]; // Default direction is horizontal diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSize@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongGrowingAndShrinkingFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongGrowingAndShrinkingFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongGrowingAndShrinkingFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAmongGrowingAndShrinkingFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenChildren@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..5318559608 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..0ba9ef5226 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAmongMixedChildrenWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactor@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongGrowingAndShrinkingFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongGrowingAndShrinkingFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongGrowingAndShrinkingFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorAmongGrowingAndShrinkingFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildren@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png new file mode 100644 index 0000000000..8792b39b8f Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@3x.png new file mode 100644 index 0000000000..df6aaf6408 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorAmongMixedChildrenArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWidth@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWidth@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWidth@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedProportionallyBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWidth@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZero@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..405fa880d3 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..bd02203060 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorDoesNotShrinkToZeroWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..4dda03f985 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..43440d2045 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeAndFlexFactorWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..ebea9c1eaa Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..1cfcea8ae2 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testNegativeViolationIsDistributedBasedOnSizeWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png new file mode 100644 index 0000000000..12a70c6a6d Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@3x.png new file mode 100644 index 0000000000..50fc7d1f8a Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEqually@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@2x.png deleted file mode 100644 index 30425f6375..0000000000 Binary files a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@2x.png and /dev/null differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@3x.png deleted file mode 100644 index 8e0939e9ab..0000000000 Binary files a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongFlexibleChildren@3x.png and /dev/null differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongGrowingAndShrinkingFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongGrowingAndShrinkingFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongGrowingAndShrinkingFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongGrowingAndShrinkingFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildren@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..5ab4b9fd6c Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..a8d657742e Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyAmongMixedChildrenWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..12a70c6a6d Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..50fc7d1f8a Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedEquallyWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionally@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongGrowingAndShrinkingFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@2x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongGrowingAndShrinkingFlexibleChildren@2x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@2x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongGrowingAndShrinkingFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@3x.png similarity index 100% rename from AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongGrowingAndShrinkingFlexibleChildren@3x.png rename to AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildren@3x.png diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..584294ebcb Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..cb8efb682d Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyAmongMixedChildrenWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..262cf4c26c Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..573dea9c82 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testPositiveViolationIsDistributedProportionallyWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png new file mode 100644 index 0000000000..c555157918 Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@2x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@3x.png new file mode 100644 index 0000000000..ee836d5cfb Binary files /dev/null and b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testRemainingViolationIsAppliedProperlyToFirstFlexibleChildWithArbitraryFloats@3x.png differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@2x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@2x.png deleted file mode 100644 index 46598b8411..0000000000 Binary files a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@2x.png and /dev/null differ diff --git a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@3x.png b/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@3x.png deleted file mode 100644 index 6303a7a871..0000000000 Binary files a/AsyncDisplayKitTests/ReferenceImages_64/ASStackLayoutSpecSnapshotTests/testViolationIsDistributedEquallyAmongFlexibleChildren@3x.png and /dev/null differ