Skip to content

Commit 1643077

Browse files
use inexactequal for float comparisons
1 parent 69db5b7 commit 1643077

2 files changed

Lines changed: 10 additions & 9 deletions

File tree

yoga/YGNodeStyle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#pragma once
99

1010
#include <stddef.h>
11-
11+
#include <cstdint>
1212
#include <yoga/YGNode.h>
1313
#include <yoga/YGValue.h>
1414

yoga/algorithm/grid/TrackSizing.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <yoga/algorithm/BoundAxis.h>
88
#include <yoga/algorithm/CalculateLayout.h>
99
#include <yoga/algorithm/grid/GridLayout.h>
10+
#include <yoga/numeric/Comparison.h>
1011
#include <yoga/style/StyleSizeLength.h>
1112
#include <set>
1213

@@ -263,7 +264,7 @@ struct TrackSizing {
263264
std::set<GridTrackSize*> frozenTracks;
264265

265266
// 2.2. Distribute space up to limits
266-
while (frozenTracks.size() < affectedTracks.size() && spaceToDistribute > 0.0f) {
267+
while (frozenTracks.size() < affectedTracks.size() && spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f)) {
267268
auto unfrozenTrackCount = affectedTracks.size() - frozenTracks.size();
268269
auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
269270

@@ -292,7 +293,7 @@ struct TrackSizing {
292293
// https://github.com/w3c/csswg-drafts/issues/3648
293294

294295
// 2.4. Distribute space beyond limits
295-
if (spaceToDistribute > 0.0f) {
296+
if (spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f)) {
296297
std::vector<GridTrackSize*> tracksToGrowBeyondLimits;
297298
if (sizeContributionPhase == SpaceDistributionPhase::AccommodateMinimumContribution) {
298299
for (auto& track: affectedTracks) {
@@ -316,7 +317,7 @@ struct TrackSizing {
316317
}
317318

318319
frozenTracks.clear();
319-
while (spaceToDistribute > 0.0f && tracksToGrowBeyondLimits.size() > 0) {
320+
while (spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f) && tracksToGrowBeyondLimits.size() > 0) {
320321
auto unfrozenTrackCount = tracksToGrowBeyondLimits.size() - frozenTracks.size();
321322
auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
322323
for (auto& track: tracksToGrowBeyondLimits) {
@@ -371,7 +372,7 @@ struct TrackSizing {
371372
// then each item-incurred increase will be zero."
372373

373374
// 2.2. Distribute space up to limits
374-
while (frozenTracks.size() < affectedTracks.size() && spaceToDistribute > 0.0f) {
375+
while (frozenTracks.size() < affectedTracks.size() && spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f)) {
375376
auto unfrozenTrackCount = affectedTracks.size() - frozenTracks.size();
376377
auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
377378

@@ -409,15 +410,15 @@ struct TrackSizing {
409410
// https://github.com/w3c/csswg-drafts/issues/3648
410411

411412
// 2.4. Distribute space beyond limits
412-
if (spaceToDistribute > 0.0f) {
413+
if (spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f)) {
413414
std::vector<GridTrackSize*> tracksToGrowBeyondLimits;
414415
for (auto& track: affectedTracks) {
415416
if (isIntrinsicSizingFunction(track->maxSizingFunction, containerSize)) {
416417
tracksToGrowBeyondLimits.push_back(track);
417418
}
418419
}
419420
frozenTracks.clear();
420-
while (spaceToDistribute > 0.0f && tracksToGrowBeyondLimits.size() > 0) {
421+
while (spaceToDistribute > 0.0f && !yoga::inexactEquals(spaceToDistribute, 0.0f) && tracksToGrowBeyondLimits.size() > 0) {
421422
// TODO: handle fit-content check here
422423
auto unfrozenTrackCount = tracksToGrowBeyondLimits.size() - frozenTracks.size();
423424
auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
@@ -518,7 +519,7 @@ struct TrackSizing {
518519
std::set<GridTrackSize*> frozenTracks;
519520
auto extraSpace = freeSpace;
520521

521-
while (frozenTracks.size() < tracks.size() && extraSpace > 0.0f) {
522+
while (frozenTracks.size() < tracks.size() && extraSpace > 0.0f && !yoga::inexactEquals(extraSpace, 0.0f)) {
522523
auto unfrozenTrackCount = tracks.size() - frozenTracks.size();
523524
auto distributionPerTrack = extraSpace / unfrozenTrackCount;
524525

@@ -656,7 +657,7 @@ struct TrackSizing {
656657
}
657658

658659
// If the free space is zero or if sizing the grid container under a min-content constraint:
659-
if (freeSpace == 0.0f) {
660+
if (yoga::inexactEquals(freeSpace, 0.0f)) {
660661
usedFlexFraction = 0.0f;
661662
}
662663
// Otherwise, if the free space is a definite length:

0 commit comments

Comments
 (0)